library(Seurat)
The legacy packages maptools, rgdal, and rgeos, underpinning this package
will retire shortly. Please refer to R-spatial evolution reports on
https://r-spatial.org/r/2023/05/15/evolution4.html for details.
This package is now running under evolution status 0 
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Attaching SeuratObject
Warning message:
R graphics engine version 15 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed. 
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.2     ✔ purrr   1.0.1
✔ tibble  3.2.1     ✔ dplyr   1.1.2
✔ tidyr   1.3.0     ✔ stringr 1.5.0
✔ readr   2.1.3     ✔ forcats 0.5.2
── Conflicts ──────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
#library(CelltypeR)
samples
 [1] "NPC3383"        "NPC3383-iso"    "NPC3575"        "NPC3575-iso"   
 [5] "NPC3595"        "NPC3595-iso"    "NPC3940"        "NPC3940N-iso"  
 [9] "NPC2965"        "NPC3567"        "NPC3567-iso"    "NPCTD06"       
[13] "NPCTD07"        "NPC3448"        "NPCTD06-iso"    "NPC3123"       
[17] "NPCQ65Q"        "NPCAIW002-02"   "NPC3940R-iso"   "Final3123"     
[21] "FinalP65P"      "FinalQ65Q"      "NPCP65P"        "Final3383-iso" 
[25] "Final3575-iso"  "Final3595"      "Final3595-iso"  "Final3940"     
[29] "Final3940N-iso" "Final3567"      "NPCAIW001-02"   "NPC2AIW002-02" 
[33] "NPCTD22"        "FinalAIW001-02" "FinalAIW002-02" "FinalTD07"     
[37] "M1"             "M2"             "M3"             "M4"            
[41] "M5"             "M6"             "M7"             "M8"            
[45] "POOL_1NPC"      "POOL_2NPC"      "POOL_3NPC"      "POOL_4Final"   

Add meta data information

DimPlot(seu)

# check with sample names

table(seu$sample, seu$CultureType)
                
                  NPC Neurons2weeks MotorNeurons
  Final3123         0           796            0
  Final3383-iso     0          1008            0
  Final3567         0           940            0
  Final3575-iso     0          1221            0
  Final3595         0          1302            0
  Final3595-iso     0          1546            0
  Final3940         0          1643            0
  Final3940N-iso    0          1238            0
  FinalAIW001-02    0          1712            0
  FinalAIW002-02    0          1439            0
  FinalP65P         0          1709            0
  FinalQ65Q         0          2739            0
  FinalTD07         0          1032            0
  M1                0             0         1290
  M2                0             0         1627
  M3                0             0         2463
  M4                0             0         1883
  M5                0             0         8202
  M6                0             0         1160
  M7                0             0         1968
  M8                0             0         1215
  NPC2965         279             0            0
  NPC2AIW002-02  1478             0            0
  NPC3123         512             0            0
  NPC3383         800             0            0
  NPC3383-iso    1030             0            0
  NPC3448        1922             0            0
  NPC3567         920             0            0
  NPC3567-iso    1372             0            0
  NPC3575         155             0            0
  NPC3575-iso    1998             0            0
  NPC3595         798             0            0
  NPC3595-iso    1300             0            0
  NPC3940         414             0            0
  NPC3940N-iso    846             0            0
  NPC3940R-iso   1105             0            0
  NPCAIW001-02   1252             0            0
  NPCAIW002-02   1840             0            0
  NPCP65P        1146             0            0
  NPCQ65Q         862             0            0
  NPCTD06        1432             0            0
  NPCTD06-iso     591             0            0
  NPCTD07        1083             0            0
  NPCTD22        1507             0            0
  POOL_1NPC       876             0            0
  POOL_2NPC       204             0            0
  POOL_3NPC      1218             0            0
  POOL_4Final       0           977            0

Add the lines and then the diseases status


seu <- annotate(seu, annotations = new_line_vector, to_label = "sample",annotation_name = "Line")

DimPlot(seu)


# check
table(seu$sample, seu$Line)
                
                 3383 3383-iso 3575 3575-iso 3595 3595-iso 3940 3940N-iso
  Final3123         0        0    0        0    0        0    0         0
  Final3383-iso     0     1008    0        0    0        0    0         0
  Final3567         0        0    0        0    0        0    0         0
  Final3575-iso     0        0    0     1221    0        0    0         0
  Final3595         0        0    0        0 1302        0    0         0
  Final3595-iso     0        0    0        0    0     1546    0         0
  Final3940         0        0    0        0    0        0 1643         0
  Final3940N-iso    0        0    0        0    0        0    0      1238
  FinalAIW001-02    0        0    0        0    0        0    0         0
  FinalAIW002-02    0        0    0        0    0        0    0         0
  FinalP65P         0        0    0        0    0        0    0         0
  FinalQ65Q         0        0    0        0    0        0    0         0
  FinalTD07         0        0    0        0    0        0    0         0
  M1                0        0    0        0    0        0    0         0
  M2                0        0    0        0    0        0    0         0
  M3                0        0    0        0    0        0    0         0
  M4                0        0    0        0    0        0    0         0
  M5                0        0    0        0    0        0    0         0
  M6                0        0    0        0    0        0    0         0
  M7                0        0    0        0    0        0    0         0
  M8                0        0    0        0    0        0    0         0
  NPC2965           0        0    0        0    0        0    0         0
  NPC2AIW002-02     0        0    0        0    0        0    0         0
  NPC3123           0        0    0        0    0        0    0         0
  NPC3383         800        0    0        0    0        0    0         0
  NPC3383-iso       0     1030    0        0    0        0    0         0
  NPC3448           0        0    0        0    0        0    0         0
  NPC3567           0        0    0        0    0        0    0         0
  NPC3567-iso       0        0    0        0    0        0    0         0
                
                 2965 3567 3567-iso TD06 TD07 3448 TD06-iso 3123-iso
  Final3123         0    0        0    0    0    0        0      796
  Final3383-iso     0    0        0    0    0    0        0        0
  Final3567         0  940        0    0    0    0        0        0
  Final3575-iso     0    0        0    0    0    0        0        0
  Final3595         0    0        0    0    0    0        0        0
  Final3595-iso     0    0        0    0    0    0        0        0
  Final3940         0    0        0    0    0    0        0        0
  Final3940N-iso    0    0        0    0    0    0        0        0
  FinalAIW001-02    0    0        0    0    0    0        0        0
  FinalAIW002-02    0    0        0    0    0    0        0        0
  FinalP65P         0    0        0    0    0    0        0        0
  FinalQ65Q         0    0        0    0    0    0        0        0
  FinalTD07         0    0        0    0 1032    0        0        0
  M1                0    0        0    0    0    0        0        0
  M2                0    0        0    0    0    0        0        0
  M3                0    0        0    0    0    0        0        0
  M4                0    0        0    0    0    0        0        0
  M5                0    0        0    0    0    0        0        0
  M6                0    0        0    0    0    0        0        0
  M7                0    0        0    0    0    0        0        0
  M8                0    0        0    0    0    0        0        0
  NPC2965         279    0        0    0    0    0        0        0
  NPC2AIW002-02     0    0        0    0    0    0        0        0
  NPC3123           0    0        0    0    0    0        0      512
  NPC3383           0    0        0    0    0    0        0        0
  NPC3383-iso       0    0        0    0    0    0        0        0
  NPC3448           0    0        0    0    0 1922        0        0
  NPC3567           0  920        0    0    0    0        0        0
  NPC3567-iso       0    0     1372    0    0    0        0        0
                
                 3123-isoQ65Q AIW002-02 3940R-iso 3123-isoP65P AIW001-02
  Final3123                 0         0         0            0         0
  Final3383-iso             0         0         0            0         0
  Final3567                 0         0         0            0         0
  Final3575-iso             0         0         0            0         0
  Final3595                 0         0         0            0         0
  Final3595-iso             0         0         0            0         0
  Final3940                 0         0         0            0         0
  Final3940N-iso            0         0         0            0         0
  FinalAIW001-02            0         0         0            0      1712
  FinalAIW002-02            0      1439         0            0         0
  FinalP65P                 0         0         0         1709         0
  FinalQ65Q              2739         0         0            0         0
  FinalTD07                 0         0         0            0         0
  M1                        0         0         0            0         0
  M2                        0         0         0            0         0
  M3                        0         0         0            0         0
  M4                        0         0         0            0         0
  M5                        0         0         0            0         0
  M6                        0         0         0            0         0
  M7                        0         0         0            0         0
  M8                        0         0         0            0         0
  NPC2965                   0         0         0            0         0
  NPC2AIW002-02             0      1478         0            0         0
  NPC3123                   0         0         0            0         0
  NPC3383                   0         0         0            0         0
  NPC3383-iso               0         0         0            0         0
  NPC3448                   0         0         0            0         0
  NPC3567                   0         0         0            0         0
  NPC3567-iso               0         0         0            0         0
                
                 TD22   M1   M2   M3   M4   M5   M6   M7   M8 POOL_1NPC
  Final3123         0    0    0    0    0    0    0    0    0         0
  Final3383-iso     0    0    0    0    0    0    0    0    0         0
  Final3567         0    0    0    0    0    0    0    0    0         0
  Final3575-iso     0    0    0    0    0    0    0    0    0         0
  Final3595         0    0    0    0    0    0    0    0    0         0
  Final3595-iso     0    0    0    0    0    0    0    0    0         0
  Final3940         0    0    0    0    0    0    0    0    0         0
  Final3940N-iso    0    0    0    0    0    0    0    0    0         0
  FinalAIW001-02    0    0    0    0    0    0    0    0    0         0
  FinalAIW002-02    0    0    0    0    0    0    0    0    0         0
  FinalP65P         0    0    0    0    0    0    0    0    0         0
  FinalQ65Q         0    0    0    0    0    0    0    0    0         0
  FinalTD07         0    0    0    0    0    0    0    0    0         0
  M1                0 1290    0    0    0    0    0    0    0         0
  M2                0    0 1627    0    0    0    0    0    0         0
  M3                0    0    0 2463    0    0    0    0    0         0
  M4                0    0    0    0 1883    0    0    0    0         0
  M5                0    0    0    0    0 8202    0    0    0         0
  M6                0    0    0    0    0    0 1160    0    0         0
  M7                0    0    0    0    0    0    0 1968    0         0
  M8                0    0    0    0    0    0    0    0 1215         0
  NPC2965           0    0    0    0    0    0    0    0    0         0
  NPC2AIW002-02     0    0    0    0    0    0    0    0    0         0
  NPC3123           0    0    0    0    0    0    0    0    0         0
  NPC3383           0    0    0    0    0    0    0    0    0         0
  NPC3383-iso       0    0    0    0    0    0    0    0    0         0
  NPC3448           0    0    0    0    0    0    0    0    0         0
  NPC3567           0    0    0    0    0    0    0    0    0         0
  NPC3567-iso       0    0    0    0    0    0    0    0    0         0
                
                 POOL_2NPC POOL_3NPC POOL_4Final
  Final3123              0         0           0
  Final3383-iso          0         0           0
  Final3567              0         0           0
  Final3575-iso          0         0           0
  Final3595              0         0           0
  Final3595-iso          0         0           0
  Final3940              0         0           0
  Final3940N-iso         0         0           0
  FinalAIW001-02         0         0           0
  FinalAIW002-02         0         0           0
  FinalP65P              0         0           0
  FinalQ65Q              0         0           0
  FinalTD07              0         0           0
  M1                     0         0           0
  M2                     0         0           0
  M3                     0         0           0
  M4                     0         0           0
  M5                     0         0           0
  M6                     0         0           0
  M7                     0         0           0
  M8                     0         0           0
  NPC2965                0         0           0
  NPC2AIW002-02          0         0           0
  NPC3123                0         0           0
  NPC3383                0         0           0
  NPC3383-iso            0         0           0
  NPC3448                0         0           0
  NPC3567                0         0           0
  NPC3567-iso            0         0           0
 [ reached getOption("max.print") -- omitted 19 rows ]
DimPlot(seu)

# add disease status

# Create the lookup table for Line to DiseaseStatus mapping
line_to_disease <- c("3448" = "HC",
                     "TD22" = "HC",
                     "AIW001-02" = "HC",
                     "AIW002-02" = "HC",
                     "2965" = "PD",
                     "3383" = "PD",
                     "3575" = "PD",
                     "TD06" = "PD",
                     "TD07" = "PD",
                     "3123" = "PD",
                     "3567" = "PD",
                     "3595" = "PD",
                     "3940" = "PD",
                     "3567-iso" = "PD-iso",
                     "3940R-iso" = "PD-iso",
                     "TD06-iso" = "PD-iso",
                     "3940N-iso" = "PD-iso",
                     "3123-isoQ65Q" = "PD-iso",
                     "3123-isoP65P" = "PD-iso",
                     "3123-iso" = "PD-iso",
                     "3383-iso" = "PD-iso",
                     "3575-iso" = "PD-iso",
                     "3595-iso" = "PD-iso")

# Assuming "Line" is your starting character vector
Idents(seu) <- "Line"
Line <- levels(seu)
# Create a new vector of disease statuses using the lookup table
disease_status_vector <- ifelse(Line %in% names(line_to_disease), 
                                line_to_disease[Line], 
                                "other")

# Print the new vector of disease statuses
print(disease_status_vector)
 [1] "PD"     "PD-iso" "PD"     "PD-iso" "PD"     "PD-iso" "PD"    
 [8] "PD-iso" "PD"     "PD"     "PD-iso" "PD"     "PD"     "HC"    
[15] "PD-iso" "PD-iso" "PD-iso" "HC"     "PD-iso" "PD-iso" "HC"    
[22] "HC"     "other"  "other"  "other"  "other"  "other"  "other" 
[29] "other"  "other"  "other"  "other"  "other"  "other" 
seu <- annotate(seu, annotations = disease_status_vector, to_label = "Line",annotation_name = "DiseaseStatus")


# check
table(seu$Line, seu$DiseaseStatus)
              
                 PD PD-iso   HC other
  3383          800      0    0     0
  3383-iso        0   2038    0     0
  3575          155      0    0     0
  3575-iso        0   3219    0     0
  3595         2100      0    0     0
  3595-iso        0   2846    0     0
  3940         2057      0    0     0
  3940N-iso       0   2084    0     0
  2965          279      0    0     0
  3567         1860      0    0     0
  3567-iso        0   1372    0     0
  TD06         1432      0    0     0
  TD07         2115      0    0     0
  3448            0      0 1922     0
  TD06-iso        0    591    0     0
  3123-iso        0   1308    0     0
  3123-isoQ65Q    0   3601    0     0
  AIW002-02       0      0 4757     0
  3940R-iso       0   1105    0     0
  3123-isoP65P    0   2855    0     0
  AIW001-02       0      0 2964     0
  TD22            0      0 1507     0
  M1              0      0    0  1290
  M2              0      0    0  1627
  M3              0      0    0  2463
  M4              0      0    0  1883
  M5              0      0    0  8202
  M6              0      0    0  1160
  M7              0      0    0  1968
  M8              0      0    0  1215
  POOL_1NPC       0      0    0   876
  POOL_2NPC       0      0    0   204
  POOL_3NPC       0      0    0  1218
  POOL_4Final     0      0    0   977
table(sample)
Error in unique.default(x, nmax = nmax) : 
  unique() applies only to vectors
cellcounts <- as.data.frame(table(seu$Line,seu$CultureType))
table(seu$Line,seu$CultureType,seu$DiseaseStatus)
, ,  = PD

              
                NPC Neurons2weeks MotorNeurons
  3383          800             0            0
  3383-iso        0             0            0
  3575          155             0            0
  3575-iso        0             0            0
  3595          798          1302            0
  3595-iso        0             0            0
  3940          414          1643            0
  3940N-iso       0             0            0
  2965          279             0            0
  3567          920           940            0
  3567-iso        0             0            0
  TD06         1432             0            0
  TD07         1083          1032            0
  3448            0             0            0
  TD06-iso        0             0            0
  3123-iso        0             0            0
  3123-isoQ65Q    0             0            0
  AIW002-02       0             0            0
  3940R-iso       0             0            0
  3123-isoP65P    0             0            0
  AIW001-02       0             0            0
  TD22            0             0            0
  M1              0             0            0
  M2              0             0            0
  M3              0             0            0
  M4              0             0            0
  M5              0             0            0
  M6              0             0            0
  M7              0             0            0
  M8              0             0            0
  POOL_1NPC       0             0            0
  POOL_2NPC       0             0            0
  POOL_3NPC       0             0            0
  POOL_4Final     0             0            0

, ,  = PD-iso

              
                NPC Neurons2weeks MotorNeurons
  3383            0             0            0
  3383-iso     1030          1008            0
  3575            0             0            0
  3575-iso     1998          1221            0
  3595            0             0            0
  3595-iso     1300          1546            0
  3940            0             0            0
  3940N-iso     846          1238            0
  2965            0             0            0
  3567            0             0            0
  3567-iso     1372             0            0
  TD06            0             0            0
  TD07            0             0            0
  3448            0             0            0
  TD06-iso      591             0            0
  3123-iso      512           796            0
  3123-isoQ65Q  862          2739            0
  AIW002-02       0             0            0
  3940R-iso    1105             0            0
  3123-isoP65P 1146          1709            0
  AIW001-02       0             0            0
  TD22            0             0            0
  M1              0             0            0
  M2              0             0            0
  M3              0             0            0
  M4              0             0            0
  M5              0             0            0
  M6              0             0            0
  M7              0             0            0
  M8              0             0            0
  POOL_1NPC       0             0            0
  POOL_2NPC       0             0            0
  POOL_3NPC       0             0            0
  POOL_4Final     0             0            0

, ,  = HC

              
                NPC Neurons2weeks MotorNeurons
  3383            0             0            0
  3383-iso        0             0            0
  3575            0             0            0
  3575-iso        0             0            0
  3595            0             0            0
  3595-iso        0             0            0
  3940            0             0            0
  3940N-iso       0             0            0
  2965            0             0            0
  3567            0             0            0
  3567-iso        0             0            0
  TD06            0             0            0
  TD07            0             0            0
  3448         1922             0            0
  TD06-iso        0             0            0
  3123-iso        0             0            0
  3123-isoQ65Q    0             0            0
  AIW002-02    3318          1439            0
  3940R-iso       0             0            0
  3123-isoP65P    0             0            0
  AIW001-02    1252          1712            0
  TD22         1507             0            0
  M1              0             0            0
  M2              0             0            0
  M3              0             0            0
  M4              0             0            0
  M5              0             0            0
  M6              0             0            0
  M7              0             0            0
  M8              0             0            0
  POOL_1NPC       0             0            0
  POOL_2NPC       0             0            0
  POOL_3NPC       0             0            0
  POOL_4Final     0             0            0

, ,  = other

              
                NPC Neurons2weeks MotorNeurons
  3383            0             0            0
  3383-iso        0             0            0
  3575            0             0            0
  3575-iso        0             0            0
  3595            0             0            0
  3595-iso        0             0            0
  3940            0             0            0
  3940N-iso       0             0            0
  2965            0             0            0
  3567            0             0            0
  3567-iso        0             0            0
  TD06            0             0            0
  TD07            0             0            0
  3448            0             0            0
  TD06-iso        0             0            0
  3123-iso        0             0            0
  3123-isoQ65Q    0             0            0
  AIW002-02       0             0            0
  3940R-iso       0             0            0
  3123-isoP65P    0             0            0
  AIW001-02       0             0            0
  TD22            0             0            0
  M1              0             0         1290
  M2              0             0         1627
  M3              0             0         2463
  M4              0             0         1883
  M5              0             0         8202
  M6              0             0         1160
  M7              0             0         1968
  M8              0             0         1215
  POOL_1NPC     876             0            0
  POOL_2NPC     204             0            0
  POOL_3NPC    1218             0            0
  POOL_4Final     0           977            0
# Convert long_df to the wide format
wide_df <- pivot_wider(cellcounts, 
                       id_cols = Var1, 
                       names_from = Var2, 
                       values_from = Freq)

write.csv(wide_df,"cellcounts_sample.csv")
DimPlot(seu, group.by = "DiseaseStatus")

Subset for to remove pools and Maria’s samples

Reprocess subset

seu.n <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamples.RDS")
  

Get clusters

Subset out neurons and NPC


#seu.n$CultureType
Idents(seu.n) <- "CultureType"
neurons <- subset(seu.n, idents = "Neurons2weeks")

DimPlot(seu)
DimPlot(seu, group.by = "CultureType")

DimPlot(seu, group.by = "Line")

save objects

neurons <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeurons.RDS")
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
*** recursive gc invocation
The legacy packages maptools, rgdal, and rgeos, underpinning this package
will retire shortly. Please refer to R-spatial evolution reports on
https://r-spatial.org/r/2023/05/15/evolution4.html for details.
This package is now running under evolution status 0 
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Warning message:
R graphics engine version 15 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed. 
table(neurons$Line)

        3383     3383-iso         3575     3575-iso         3595 
           0         1008            0         1221         1302 
    3595-iso         3940    3940N-iso         2965         3567 
        1546         1643         1238            0          940 
    3567-iso         TD06         TD07         3448     TD06-iso 
           0            0         1032            0            0 
    3123-iso 3123-isoQ65Q    AIW002-02    3940R-iso 3123-isoP65P 
         796         2739         1439            0         1709 
   AIW001-02         TD22           M1           M2           M3 
        1712            0            0            0            0 
          M4           M5           M6           M7           M8 
           0            0            0            0            0 
   POOL_1NPC    POOL_2NPC    POOL_3NPC  POOL_4Final 
           0            0            0            0 
Idents(neurons) <- "Line"
levels(neurons)
 [1] "3383-iso"     "3575-iso"     "3595"         "3595-iso"    
 [5] "3940"         "3940N-iso"    "3567"         "TD07"        
 [9] "3123-iso"     "3123-isoQ65Q" "AIW002-02"    "3123-isoP65P"
[13] "AIW001-02"   
table(neurons$DiseaseStatus,neurons$Line)
        
         3383 3383-iso 3575 3575-iso 3595 3595-iso 3940 3940N-iso
  PD        0        0    0        0 1302        0 1643         0
  PD-iso    0     1008    0     1221    0     1546    0      1238
  HC        0        0    0        0    0        0    0         0
  other     0        0    0        0    0        0    0         0
        
         2965 3567 3567-iso TD06 TD07 3448 TD06-iso 3123-iso
  PD        0  940        0    0 1032    0        0        0
  PD-iso    0    0        0    0    0    0        0      796
  HC        0    0        0    0    0    0        0        0
  other     0    0        0    0    0    0        0        0
        
         3123-isoQ65Q AIW002-02 3940R-iso 3123-isoP65P AIW001-02
  PD                0         0         0            0         0
  PD-iso         2739         0         0         1709         0
  HC                0      1439         0            0      1712
  other             0         0         0            0         0
        
         TD22   M1   M2   M3   M4   M5   M6   M7   M8 POOL_1NPC
  PD        0    0    0    0    0    0    0    0    0         0
  PD-iso    0    0    0    0    0    0    0    0    0         0
  HC        0    0    0    0    0    0    0    0    0         0
  other     0    0    0    0    0    0    0    0    0         0
        
         POOL_2NPC POOL_3NPC POOL_4Final
  PD             0         0           0
  PD-iso         0         0           0
  HC             0         0           0
  other          0         0           0

Now integrate samples


# All samples is too large to integrate 

Idents(neurons) <- "DiseaseStatus"
levels(neurons)
[1] "PD"     "PD-iso" "HC"    
neur.PD <- subset(neurons, idents = "PD")
neur.PDiso <- subset(neurons, idents = "PD-iso")
neur.HC <- subset(neurons, idents = "HC")

# make a list of seurat objects by our cell type variable
# will integrate the PD, PD-iso, HC separately and then merge them will see if will integrate or not
# an integrate function

# Define a function for integrating a list of Seurat objects
integrate_seurat_objects <- function(seurat_list, dims = 1:30) {
  # Normalize and find variable features for each object
  for (i in 1:length(seurat_list)) {
    seurat_list[[i]] <- NormalizeData(seurat_list[[i]], verbose = FALSE)
    seurat_list[[i]] <- FindVariableFeatures(seurat_list[[i]], selection.method = "vst")
  }

  # Create an empty Seurat object to store the integrated data
  integrated_seurat <- subset(seurat_list[[1]])

  # Iterate over the list of Seurat objects
  for (i in 1:length(seurat_list)) {
    # Rename the 'orig.ident' metadata inside the Seurat object to match the object name in the list
    seurat_list[[i]]$orig.ident <- names(seurat_list)[i]
  }

  sample.list <- seurat_list
  for (i in 1:length(sample.list)) {
    # Normalize and scale the data
    sample.list[[i]] <- NormalizeData(sample.list[[i]], verbose = FALSE)
    sample.list[[i]] <- ScaleData(sample.list[[i]], verbose = FALSE)
    # Find variable features
    sample.list[[i]] <- FindVariableFeatures(sample.list[[i]], selection.method = "vst")
    # Get the variable features
    variable_features <- VariableFeatures(sample.list[[i]])
    # Run PCA with the variable features
    sample.list[[i]] <- RunPCA(sample.list[[i]], verbose = FALSE, npcs = 30, features = variable_features)
  }

  # Find integration anchors
  int.anchors <- FindIntegrationAnchors(object.list = sample.list, dims = dims, reduction = "rpca")

  # Integrate data
  integrated_seurat <- IntegrateData(anchorset = int.anchors, dims = dims)

  return(integrated_seurat)
}

Use function to integrate the HC

sublist <- SplitObject(neur.PDiso, split.by = "Line")

int.PDiso <- integrate_seurat_objects(sublist, dims = 1:30)
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Computing 2000 integration features
Scaling features for provided objects

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Computing within dataset neighborhoods

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~01s          
  |+++++++++++++++                                   | 29% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1404 anchors

  |+++                                               | 5 % ~44s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1428 anchors

  |+++++                                             | 10% ~58s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2252 anchors

  |++++++++                                          | 14% ~01m 00s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 502 anchors

  |++++++++++                                        | 19% ~51s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 664 anchors

  |++++++++++++                                      | 24% ~46s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 630 anchors

  |+++++++++++++++                                   | 29% ~44s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 925 anchors

  |+++++++++++++++++                                 | 33% ~40s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1152 anchors

  |++++++++++++++++++++                              | 38% ~37s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1390 anchors

  |++++++++++++++++++++++                            | 43% ~36s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 602 anchors

  |++++++++++++++++++++++++                          | 48% ~32s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 525 anchors

  |+++++++++++++++++++++++++++                       | 52% ~29s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 653 anchors

  |+++++++++++++++++++++++++++++                     | 57% ~27s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 709 anchors

  |+++++++++++++++++++++++++++++++                   | 62% ~25s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 336 anchors

  |++++++++++++++++++++++++++++++++++                | 67% ~21s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 665 anchors

  |++++++++++++++++++++++++++++++++++++              | 71% ~18s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 467 anchors

  |+++++++++++++++++++++++++++++++++++++++           | 76% ~15s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 613 anchors

  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~12s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 777 anchors

  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~09s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 279 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 652 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 856 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=59s  
Merging dataset 1 into 3
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 2 into 3 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 5 into 3 1 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 7 into 6
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 4 into 3 1 2 5
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 6 7 into 3 1 2 5 4
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
integrated_seurat <- integrate_seurat_objects(Neuron_list, dims = 1:20)
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Computing 2000 integration features
Scaling features for provided objects

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
Computing within dataset neighborhoods

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 905 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Merging dataset 1 into 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
# save integrated objects
saveRDS(int.HC, "/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintHC.RDS")
saveRDS(int.PD, "/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintPD.RDS")
saveRDS(int.PDiso, "/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintPDiso.RDS")

Read in the integrated objects and then integrate all 3


int.HC <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintHC.RDS")
int.PD <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintPD.RDS")
Loading required package: SeuratObject
Loading required package: sp
The legacy packages maptools, rgdal, and rgeos, underpinning this package
will retire shortly. Please refer to R-spatial evolution reports on
https://r-spatial.org/r/2023/05/15/evolution4.html for details.
This package is now running under evolution status 0 
int.PDiso("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintPD.RDS")
Error in int.PDiso("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/ParseNCADDsamplesNeuronsintPD.RDS") : 
  could not find function "int.PDiso"

Integrated only the PD and HC

seu <- RunPCA(seu, npcs = 20, verbose = FALSE)
seu <- RunUMAP(seu, reduction = "pca", dims = 1:20, n.neighbors = 81)
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
22:08:22 UMAP embedding parameters a = 0.9922 b = 1.112
22:08:22 Read 8068 rows and found 20 numeric columns
22:08:22 Using Annoy for neighbor search, n_neighbors = 81
22:08:22 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
22:08:23 Writing NN index file to temp file /var/folders/k4/khtkczkd5tn732ftjpwgtr240000gn/T//Rtmp2Z2lqE/filede53781a1af9
22:08:23 Searching Annoy index using 1 thread, search_k = 8100
22:08:29 Annoy recall = 100%
22:08:29 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 81
22:08:31 Initializing from normalized Laplacian + noise (using irlba)
22:08:31 Commencing optimization for 500 epochs, with 817690 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
22:08:59 Optimization finished
seu <- FindVariableFeatures(seu)
Warning in FindVariableFeatures.Assay(object = assay.data, selection.method = selection.method,  :
  selection.method set to 'vst' but count slot is empty; will use data slot instead
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Warning in eval(predvars, data, env) : NaNs produced
Warning in hvf.info$variance.expected[not.const] <- 10^fit$fitted :
  number of items to replace is not a multiple of replacement length
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
seu <- FindNeighbors(seu, dims = 1:20, k.param = 81)
Computing nearest neighbor graph
Computing SNN
seu <- FindClusters(seu, resolution = 0.3)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 8068
Number of edges: 948317

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9346
Number of communities: 12
Elapsed time: 2 seconds
DimPlot(seu)

DimPlot(seu, group.by = "Line")

DimPlot(seu, group.by = "DiseaseStatus")

Samples are not well integrated. I’ll try to integrate by lines

int.PDHC <- integrate_seurat_objects(sublist, dims = 1:20)
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Computing 2000 integration features
Scaling features for provided objects

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
Computing within dataset neighborhoods

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~02s          
  |+++++++++++++++++                                 | 33% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 465 anchors

  |++++                                              | 7 % ~31s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 328 anchors

  |+++++++                                           | 13% ~26s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 291 anchors

  |++++++++++                                        | 20% ~24s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 214 anchors

  |++++++++++++++                                    | 27% ~23s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 264 anchors

  |+++++++++++++++++                                 | 33% ~21s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 202 anchors

  |++++++++++++++++++++                              | 40% ~19s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 194 anchors

  |++++++++++++++++++++++++                          | 47% ~17s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 433 anchors

  |+++++++++++++++++++++++++++                       | 53% ~15s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 472 anchors

  |++++++++++++++++++++++++++++++                    | 60% ~12s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 217 anchors

  |++++++++++++++++++++++++++++++++++                | 67% ~10s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 258 anchors

  |+++++++++++++++++++++++++++++++++++++             | 73% ~08s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 357 anchors

  |++++++++++++++++++++++++++++++++++++++++          | 80% ~06s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 346 anchors

  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 379 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 353 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=31s  
Merging dataset 3 into 5
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 6 into 4
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 1 into 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 4 6 into 2 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 5 3 into 2 1 4 6
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
# make UMAP from integrated
seu <- int.PDHC
seu <- ScaleData(seu)
Centering and scaling data matrix

  |                                                                           
  |                                                                     |   0%
  |                                                                           
  |==================================                                   |  50%
  |                                                                           
  |=====================================================================| 100%
seu <- RunPCA(seu, npcs = 20, verbose = FALSE)
seu <- RunUMAP(seu, reduction = "pca", dims = 1:20, n.neighbors = 81)
22:20:20 UMAP embedding parameters a = 0.9922 b = 1.112
22:20:20 Read 8068 rows and found 20 numeric columns
22:20:20 Using Annoy for neighbor search, n_neighbors = 81
22:20:20 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
22:20:21 Writing NN index file to temp file /var/folders/k4/khtkczkd5tn732ftjpwgtr240000gn/T//Rtmp2Z2lqE/filede533410f880
22:20:21 Searching Annoy index using 1 thread, search_k = 8100
22:20:27 Annoy recall = 100%
22:20:27 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 81
22:20:29 Initializing from normalized Laplacian + noise (using irlba)
22:20:29 Commencing optimization for 500 epochs, with 831426 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
22:20:57 Optimization finished
seu <- FindVariableFeatures(seu)
Warning in FindVariableFeatures.Assay(object = assay.data, selection.method = selection.method,  :
  selection.method set to 'vst' but count slot is empty; will use data slot instead
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Warning in eval(predvars, data, env) : NaNs produced
Warning in hvf.info$variance.expected[not.const] <- 10^fit$fitted :
  number of items to replace is not a multiple of replacement length
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
seu <- FindNeighbors(seu, dims = 1:20, k.param = 81)
Computing nearest neighbor graph
Computing SNN
seu <- FindClusters(seu, resolution = 0.3)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 8068
Number of edges: 998111

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9125
Number of communities: 12
Elapsed time: 3 seconds
DimPlot(seu)

DimPlot(seu, group.by = "Line")

DimPlot(seu, group.by = "DiseaseStatus")

Annotate

gene lists


da_neurons <- c("TH","SLC6A3","SLC18A2","SOX6","NDNF","SNCG","ALDH1A1","CALB1","TACR2","SLC17A6","SLC32A1","OTX2","GRP","LPL","CCK","VIP")
NPC_orStemLike <- c("DCX","NEUROD1","TBR1","PCNA","MKI67","SOX2","NES","PAX6")
mature_neurons = c("RBFOX3","SYP","VAMP1","VAMP2","TUBB3","SYT1","BSN","HOMER1","SLC17A6")
excitatory_neurons = c("GRIA2","GRIA1","GRIA4","GRIN1","GRIN2B","GRIN2A","GRIN3A","GRIN3","GRIP1","CAMK2A")
inhbitory_neurons = c("GAD1","GAD2", "GAT1","PVALB","GABR2","GABR1","GBRR1","GABRB2","GABRB1","GABRB3","GABRA6","GABRA1","GABRA4","TRAK2")
astrocytes <- c("GFAP","S100B","AQP4","APOE", "SOX9","SLC1A3")
oligodendrocytes <- c("MBP","MOG","OLIG1","OLIG2","SOX10")

radial_glia <- c("PTPRC","AIF1","ADGRE1", "VIM", "TNC","PTPRZ1","FAM107A","HOPX","LIFR",
              "ITGB5","IL6ST","SLC1A3")
epithelial <- c("HES1","HES5","SOX2","SOX10","NES","CDH1","NOTCH1")

microglia <- c("IBA1","P2RY12","P2RY13","TREM119", "GPR34","SIGLECH","TREM2",
               "CX3CR1","FCRLS","OLFML3","HEXB","TGFBR1", "SALL1","MERTK",
               "PROS1")

features_list <- c("MKI67","SOX2","POU5F1","DLX2","PAX6","SOX9","HES1","NES","RBFOX3","MAP2","NCAM1","CD24","GRIA2","GRIN2B","GABBR1","GAD1","GAD2","GABRA1","GABRB2","TH","ALDH1A1","LMX1B","NR4A2","CORIN","CALB1","KCNJ6","CXCR4","ITGA6","SLC1A3","CD44","AQP4","S100B", "PDGFRA","OLIG2","MBP","CLDN11","VIM","VCAM1")

short_list <- c("MKI67","SOX9","HES1","NES","DLX2","RBFOX3","MAP2","TH","CALB1","KCNJ6","SLC1A3","CD44","AQP4","S100B","OLIG2","MBP","VIM")


gene_lists = list("DA_neurons" = da_neurons, "NPC" = NPC_orStemLike,
                  "Neurons" = mature_neurons, 
                  "Oligo" = oligodendrocytes, "RadialGlia" = radial_glia,
                  "Epithelial" = epithelial)
Idents(seu) <- "integrated_snn_res.0.3"

for (i in da_neurons) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find TH in the default search locations, found in RNA assay instead
Warning: Could not find SLC6A3 in the default search locations, found in RNA assay instead
Warning: Could not find SLC18A2 in the default search locations, found in RNA assay instead
Warning: Could not find SNCG in the default search locations, found in RNA assay instead
Warning: Could not find ALDH1A1 in the default search locations, found in RNA assay instead
Warning: Could not find TACR2 in the default search locations, found in RNA assay instead
Warning: Could not find SLC32A1 in the default search locations, found in RNA assay instead
Warning: Could not find GRP in the default search locations, found in RNA assay instead
Warning: Could not find CCK in the default search locations, found in RNA assay instead
Warning: Could not find VIP in the default search locations, found in RNA assay instead
Warning in FeaturePlot(seu, features = i, min.cutoff = "q1", max.cutoff = "q97",  :
  All cells have the same value (0.648363577932972) of rna_VIP.

Make a dotplot of DA genes that are expressed

da_neurons <- c("TH","SLC18A2","SOX6","NDNF","ALDH1A1","SLC17A6","SLC32A1","OTX2","LPL")

DotPlot(seu, features = da_neurons) + RotatedAxis()
Warning: Could not find TH in the default search locations, found in RNA assay instead
Warning: Could not find SLC18A2 in the default search locations, found in RNA assay instead
Warning: Could not find ALDH1A1 in the default search locations, found in RNA assay instead
Warning: Could not find SLC32A1 in the default search locations, found in RNA assay instead

DefaultAssay(seu) <- "RNA"
seu <- ScaleData(seu)
Centering and scaling data matrix

  |                                                                           
  |                                                                     |   0%
  |                                                                           
  |=                                                                    |   2%
  |                                                                           
  |==                                                                   |   3%
  |                                                                           
  |====                                                                 |   5%
  |                                                                           
  |=====                                                                |   7%
  |                                                                           
  |======                                                               |   8%
  |                                                                           
  |=======                                                              |  10%
  |                                                                           
  |========                                                             |  12%
  |                                                                           
  |=========                                                            |  14%
  |                                                                           
  |===========                                                          |  15%
  |                                                                           
  |============                                                         |  17%
  |                                                                           
  |=============                                                        |  19%
  |                                                                           
  |==============                                                       |  20%
  |                                                                           
  |===============                                                      |  22%
  |                                                                           
  |================                                                     |  24%
  |                                                                           
  |==================                                                   |  25%
  |                                                                           
  |===================                                                  |  27%
  |                                                                           
  |====================                                                 |  29%
  |                                                                           
  |=====================                                                |  31%
  |                                                                           
  |======================                                               |  32%
  |                                                                           
  |=======================                                              |  34%
  |                                                                           
  |=========================                                            |  36%
  |                                                                           
  |==========================                                           |  37%
  |                                                                           
  |===========================                                          |  39%
  |                                                                           
  |============================                                         |  41%
  |                                                                           
  |=============================                                        |  42%
  |                                                                           
  |==============================                                       |  44%
  |                                                                           
  |================================                                     |  46%
  |                                                                           
  |=================================                                    |  47%
  |                                                                           
  |==================================                                   |  49%
  |                                                                           
  |===================================                                  |  51%
  |                                                                           
  |====================================                                 |  53%
  |                                                                           
  |=====================================                                |  54%
  |                                                                           
  |=======================================                              |  56%
  |                                                                           
  |========================================                             |  58%
  |                                                                           
  |=========================================                            |  59%
  |                                                                           
  |==========================================                           |  61%
  |                                                                           
  |===========================================                          |  63%
  |                                                                           
  |============================================                         |  64%
  |                                                                           
  |==============================================                       |  66%
  |                                                                           
  |===============================================                      |  68%
  |                                                                           
  |================================================                     |  69%
  |                                                                           
  |=================================================                    |  71%
  |                                                                           
  |==================================================                   |  73%
  |                                                                           
  |===================================================                  |  75%
  |                                                                           
  |=====================================================                |  76%
  |                                                                           
  |======================================================               |  78%
  |                                                                           
  |=======================================================              |  80%
  |                                                                           
  |========================================================             |  81%
  |                                                                           
  |=========================================================            |  83%
  |                                                                           
  |==========================================================           |  85%
  |                                                                           
  |============================================================         |  86%
  |                                                                           
  |=============================================================        |  88%
  |                                                                           
  |==============================================================       |  90%
  |                                                                           
  |===============================================================      |  92%
  |                                                                           
  |================================================================     |  93%
  |                                                                           
  |=================================================================    |  95%
  |                                                                           
  |===================================================================  |  97%
  |                                                                           
  |==================================================================== |  98%
  |                                                                           
  |=====================================================================| 100%
Idents(seu) <- "integrated_snn_res.0.3"

for (i in NPC_orStemLike) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

Idents(seu) <- "integrated_snn_res.0.3"

for (i in mature_neurons) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

NA
NA
Idents(seu) <- "integrated_snn_res.0.3"

for (i in excitatory_neurons) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: GRIN3
Error: None of the requested features were found: GRIN3 in slot data


Idents(seu) <- "integrated_snn_res.0.3"
inhbitory_neurons = c("GAD1","GAD2","PVALB","GABRB2","GABRB1","GABRB3","GABRA6","GABRA1","GABRA4","TRAK2")

for (i in inhbitory_neurons) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

Idents(seu) <- "integrated_snn_res.0.3"

for (i in epithelial) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

Idents(seu) <- "integrated_snn_res.0.3"
microglia <- c("P2RY12","P2RY13", "GPR34","TREM2",
               "CX3CR1","OLFML3","HEXB","TGFBR1", "SALL1","MERTK",
               "PROS1")
# no IBA1, TREM119"SIGLECH","FCRLS",
for (i in microglia) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning in FeaturePlot(seu, features = i, min.cutoff = "q1", max.cutoff = "q97",  :
  All cells have the same value (0) of TREM2.

for (i in astrocytes) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

for (i in oligodendrocytes) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning in FeaturePlot(seu, features = i, min.cutoff = "q1", max.cutoff = "q97",  :
  All cells have the same value (0) of OLIG1.

for (i in radial_glia) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

Get markers and check EnrichR


ClusterMarkers <- FindAllMarkers(seu, only.pos = TRUE)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~26s          
  |++                                                | 2 % ~24s          
  |++                                                | 3 % ~24s          
  |+++                                               | 4 % ~24s          
  |+++                                               | 5 % ~23s          
  |++++                                              | 6 % ~23s          
  |++++                                              | 7 % ~22s          
  |+++++                                             | 8 % ~23s          
  |+++++                                             | 9 % ~23s          
  |++++++                                            | 11% ~22s          
  |++++++                                            | 12% ~22s          
  |+++++++                                           | 13% ~22s          
  |+++++++                                           | 14% ~22s          
  |++++++++                                          | 15% ~21s          
  |++++++++                                          | 16% ~21s          
  |+++++++++                                         | 17% ~21s          
  |+++++++++                                         | 18% ~21s          
  |++++++++++                                        | 19% ~21s          
  |++++++++++                                        | 20% ~20s          
  |+++++++++++                                       | 21% ~20s          
  |++++++++++++                                      | 22% ~20s          
  |++++++++++++                                      | 23% ~20s          
  |+++++++++++++                                     | 24% ~19s          
  |+++++++++++++                                     | 25% ~19s          
  |++++++++++++++                                    | 26% ~19s          
  |++++++++++++++                                    | 27% ~18s          
  |+++++++++++++++                                   | 28% ~18s          
  |+++++++++++++++                                   | 29% ~18s          
  |++++++++++++++++                                  | 31% ~18s          
  |++++++++++++++++                                  | 32% ~17s          
  |+++++++++++++++++                                 | 33% ~17s          
  |+++++++++++++++++                                 | 34% ~17s          
  |++++++++++++++++++                                | 35% ~16s          
  |++++++++++++++++++                                | 36% ~16s          
  |+++++++++++++++++++                               | 37% ~16s          
  |+++++++++++++++++++                               | 38% ~16s          
  |++++++++++++++++++++                              | 39% ~16s          
  |++++++++++++++++++++                              | 40% ~15s          
  |+++++++++++++++++++++                             | 41% ~15s          
  |++++++++++++++++++++++                            | 42% ~15s          
  |++++++++++++++++++++++                            | 43% ~14s          
  |+++++++++++++++++++++++                           | 44% ~14s          
  |+++++++++++++++++++++++                           | 45% ~14s          
  |++++++++++++++++++++++++                          | 46% ~14s          
  |++++++++++++++++++++++++                          | 47% ~13s          
  |+++++++++++++++++++++++++                         | 48% ~13s          
  |+++++++++++++++++++++++++                         | 49% ~13s          
  |++++++++++++++++++++++++++                        | 51% ~13s          
  |++++++++++++++++++++++++++                        | 52% ~12s          
  |+++++++++++++++++++++++++++                       | 53% ~12s          
  |+++++++++++++++++++++++++++                       | 54% ~12s          
  |++++++++++++++++++++++++++++                      | 55% ~11s          
  |++++++++++++++++++++++++++++                      | 56% ~11s          
  |+++++++++++++++++++++++++++++                     | 57% ~11s          
  |+++++++++++++++++++++++++++++                     | 58% ~11s          
  |++++++++++++++++++++++++++++++                    | 59% ~10s          
  |++++++++++++++++++++++++++++++                    | 60% ~10s          
  |+++++++++++++++++++++++++++++++                   | 61% ~10s          
  |++++++++++++++++++++++++++++++++                  | 62% ~10s          
  |++++++++++++++++++++++++++++++++                  | 63% ~09s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~09s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~09s          
  |++++++++++++++++++++++++++++++++++                | 66% ~09s          
  |++++++++++++++++++++++++++++++++++                | 67% ~08s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~08s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~08s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~07s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~07s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~07s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~06s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=26s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~20s          
  |++                                                | 2 % ~16s          
  |++                                                | 3 % ~15s          
  |+++                                               | 4 % ~15s          
  |+++                                               | 6 % ~15s          
  |++++                                              | 7 % ~15s          
  |++++                                              | 8 % ~15s          
  |+++++                                             | 9 % ~15s          
  |++++++                                            | 10% ~14s          
  |++++++                                            | 11% ~14s          
  |+++++++                                           | 12% ~14s          
  |+++++++                                           | 13% ~13s          
  |++++++++                                          | 15% ~13s          
  |++++++++                                          | 16% ~13s          
  |+++++++++                                         | 17% ~13s          
  |+++++++++                                         | 18% ~13s          
  |++++++++++                                        | 19% ~12s          
  |+++++++++++                                       | 20% ~12s          
  |+++++++++++                                       | 21% ~12s          
  |++++++++++++                                      | 22% ~12s          
  |++++++++++++                                      | 24% ~12s          
  |+++++++++++++                                     | 25% ~12s          
  |+++++++++++++                                     | 26% ~11s          
  |++++++++++++++                                    | 27% ~11s          
  |+++++++++++++++                                   | 28% ~11s          
  |+++++++++++++++                                   | 29% ~11s          
  |++++++++++++++++                                  | 30% ~11s          
  |++++++++++++++++                                  | 31% ~10s          
  |+++++++++++++++++                                 | 33% ~10s          
  |+++++++++++++++++                                 | 34% ~10s          
  |++++++++++++++++++                                | 35% ~10s          
  |++++++++++++++++++                                | 36% ~10s          
  |+++++++++++++++++++                               | 37% ~10s          
  |++++++++++++++++++++                              | 38% ~09s          
  |++++++++++++++++++++                              | 39% ~09s          
  |+++++++++++++++++++++                             | 40% ~09s          
  |+++++++++++++++++++++                             | 42% ~09s          
  |++++++++++++++++++++++                            | 43% ~09s          
  |++++++++++++++++++++++                            | 44% ~09s          
  |+++++++++++++++++++++++                           | 45% ~08s          
  |++++++++++++++++++++++++                          | 46% ~08s          
  |++++++++++++++++++++++++                          | 47% ~08s          
  |+++++++++++++++++++++++++                         | 48% ~08s          
  |+++++++++++++++++++++++++                         | 49% ~08s          
  |++++++++++++++++++++++++++                        | 51% ~07s          
  |++++++++++++++++++++++++++                        | 52% ~07s          
  |+++++++++++++++++++++++++++                       | 53% ~07s          
  |+++++++++++++++++++++++++++                       | 54% ~07s          
  |++++++++++++++++++++++++++++                      | 55% ~07s          
  |+++++++++++++++++++++++++++++                     | 56% ~07s          
  |+++++++++++++++++++++++++++++                     | 57% ~06s          
  |++++++++++++++++++++++++++++++                    | 58% ~06s          
  |++++++++++++++++++++++++++++++                    | 60% ~06s          
  |+++++++++++++++++++++++++++++++                   | 61% ~06s          
  |+++++++++++++++++++++++++++++++                   | 62% ~06s          
  |++++++++++++++++++++++++++++++++                  | 63% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~05s          
  |++++++++++++++++++++++++++++++++++                | 66% ~05s          
  |++++++++++++++++++++++++++++++++++                | 67% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~05s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=15s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01m 02s      
  |++                                                | 2 % ~59s          
  |++                                                | 3 % ~59s          
  |+++                                               | 4 % ~58s          
  |+++                                               | 5 % ~57s          
  |++++                                              | 6 % ~56s          
  |++++                                              | 7 % ~56s          
  |+++++                                             | 9 % ~55s          
  |+++++                                             | 10% ~54s          
  |++++++                                            | 11% ~54s          
  |++++++                                            | 12% ~53s          
  |+++++++                                           | 13% ~52s          
  |+++++++                                           | 14% ~51s          
  |++++++++                                          | 15% ~50s          
  |++++++++                                          | 16% ~52s          
  |+++++++++                                         | 17% ~51s          
  |++++++++++                                        | 18% ~50s          
  |++++++++++                                        | 19% ~49s          
  |+++++++++++                                       | 20% ~49s          
  |+++++++++++                                       | 21% ~48s          
  |++++++++++++                                      | 22% ~47s          
  |++++++++++++                                      | 23% ~46s          
  |+++++++++++++                                     | 24% ~46s          
  |+++++++++++++                                     | 26% ~45s          
  |++++++++++++++                                    | 27% ~44s          
  |++++++++++++++                                    | 28% ~43s          
  |+++++++++++++++                                   | 29% ~43s          
  |+++++++++++++++                                   | 30% ~42s          
  |++++++++++++++++                                  | 31% ~41s          
  |++++++++++++++++                                  | 32% ~40s          
  |+++++++++++++++++                                 | 33% ~40s          
  |++++++++++++++++++                                | 34% ~39s          
  |++++++++++++++++++                                | 35% ~38s          
  |+++++++++++++++++++                               | 36% ~38s          
  |+++++++++++++++++++                               | 37% ~37s          
  |++++++++++++++++++++                              | 38% ~36s          
  |++++++++++++++++++++                              | 39% ~36s          
  |+++++++++++++++++++++                             | 40% ~35s          
  |+++++++++++++++++++++                             | 41% ~34s          
  |++++++++++++++++++++++                            | 43% ~34s          
  |++++++++++++++++++++++                            | 44% ~33s          
  |+++++++++++++++++++++++                           | 45% ~32s          
  |+++++++++++++++++++++++                           | 46% ~32s          
  |++++++++++++++++++++++++                          | 47% ~31s          
  |++++++++++++++++++++++++                          | 48% ~31s          
  |+++++++++++++++++++++++++                         | 49% ~30s          
  |+++++++++++++++++++++++++                         | 50% ~29s          
  |++++++++++++++++++++++++++                        | 51% ~29s          
  |+++++++++++++++++++++++++++                       | 52% ~28s          
  |+++++++++++++++++++++++++++                       | 53% ~27s          
  |++++++++++++++++++++++++++++                      | 54% ~27s          
  |++++++++++++++++++++++++++++                      | 55% ~26s          
  |+++++++++++++++++++++++++++++                     | 56% ~26s          
  |+++++++++++++++++++++++++++++                     | 57% ~25s          
  |++++++++++++++++++++++++++++++                    | 59% ~24s          
  |++++++++++++++++++++++++++++++                    | 60% ~24s          
  |+++++++++++++++++++++++++++++++                   | 61% ~23s          
  |+++++++++++++++++++++++++++++++                   | 62% ~22s          
  |++++++++++++++++++++++++++++++++                  | 63% ~22s          
  |++++++++++++++++++++++++++++++++                  | 64% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~20s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
  |++++++++++++++++++++++++++++++++++                | 67% ~19s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~18s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~18s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~17s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~16s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~09s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=57s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~26s          
  |++                                                | 2 % ~25s          
  |++                                                | 3 % ~25s          
  |+++                                               | 4 % ~24s          
  |+++                                               | 5 % ~23s          
  |++++                                              | 6 % ~23s          
  |++++                                              | 7 % ~23s          
  |+++++                                             | 8 % ~22s          
  |+++++                                             | 9 % ~22s          
  |++++++                                            | 11% ~21s          
  |++++++                                            | 12% ~21s          
  |+++++++                                           | 13% ~21s          
  |+++++++                                           | 14% ~21s          
  |++++++++                                          | 15% ~21s          
  |++++++++                                          | 16% ~20s          
  |+++++++++                                         | 17% ~20s          
  |+++++++++                                         | 18% ~20s          
  |++++++++++                                        | 19% ~19s          
  |++++++++++                                        | 20% ~19s          
  |+++++++++++                                       | 21% ~19s          
  |++++++++++++                                      | 22% ~19s          
  |++++++++++++                                      | 23% ~19s          
  |+++++++++++++                                     | 24% ~18s          
  |+++++++++++++                                     | 25% ~18s          
  |++++++++++++++                                    | 26% ~18s          
  |++++++++++++++                                    | 27% ~18s          
  |+++++++++++++++                                   | 28% ~17s          
  |+++++++++++++++                                   | 29% ~17s          
  |++++++++++++++++                                  | 31% ~17s          
  |++++++++++++++++                                  | 32% ~17s          
  |+++++++++++++++++                                 | 33% ~16s          
  |+++++++++++++++++                                 | 34% ~16s          
  |++++++++++++++++++                                | 35% ~16s          
  |++++++++++++++++++                                | 36% ~16s          
  |+++++++++++++++++++                               | 37% ~15s          
  |+++++++++++++++++++                               | 38% ~15s          
  |++++++++++++++++++++                              | 39% ~15s          
  |++++++++++++++++++++                              | 40% ~15s          
  |+++++++++++++++++++++                             | 41% ~14s          
  |++++++++++++++++++++++                            | 42% ~14s          
  |++++++++++++++++++++++                            | 43% ~14s          
  |+++++++++++++++++++++++                           | 44% ~14s          
  |+++++++++++++++++++++++                           | 45% ~13s          
  |++++++++++++++++++++++++                          | 46% ~13s          
  |++++++++++++++++++++++++                          | 47% ~13s          
  |+++++++++++++++++++++++++                         | 48% ~13s          
  |+++++++++++++++++++++++++                         | 49% ~12s          
  |++++++++++++++++++++++++++                        | 51% ~12s          
  |++++++++++++++++++++++++++                        | 52% ~12s          
  |+++++++++++++++++++++++++++                       | 53% ~12s          
  |+++++++++++++++++++++++++++                       | 54% ~11s          
  |++++++++++++++++++++++++++++                      | 55% ~11s          
  |++++++++++++++++++++++++++++                      | 56% ~11s          
  |+++++++++++++++++++++++++++++                     | 57% ~10s          
  |+++++++++++++++++++++++++++++                     | 58% ~10s          
  |++++++++++++++++++++++++++++++                    | 59% ~10s          
  |++++++++++++++++++++++++++++++                    | 60% ~10s          
  |+++++++++++++++++++++++++++++++                   | 61% ~09s          
  |++++++++++++++++++++++++++++++++                  | 62% ~09s          
  |++++++++++++++++++++++++++++++++                  | 63% ~09s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~09s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~08s          
  |++++++++++++++++++++++++++++++++++                | 66% ~08s          
  |++++++++++++++++++++++++++++++++++                | 67% ~08s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~08s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~07s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~07s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=24s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~55s          
  |++                                                | 2 % ~57s          
  |++                                                | 3 % ~57s          
  |+++                                               | 4 % ~57s          
  |+++                                               | 5 % ~57s          
  |++++                                              | 6 % ~01m 02s      
  |++++                                              | 7 % ~01m 01s      
  |+++++                                             | 8 % ~59s          
  |+++++                                             | 9 % ~58s          
  |++++++                                            | 10% ~57s          
  |++++++                                            | 11% ~56s          
  |+++++++                                           | 12% ~54s          
  |+++++++                                           | 14% ~54s          
  |++++++++                                          | 15% ~53s          
  |++++++++                                          | 16% ~51s          
  |+++++++++                                         | 17% ~51s          
  |+++++++++                                         | 18% ~50s          
  |++++++++++                                        | 19% ~49s          
  |++++++++++                                        | 20% ~48s          
  |+++++++++++                                       | 21% ~48s          
  |+++++++++++                                       | 22% ~47s          
  |++++++++++++                                      | 23% ~46s          
  |++++++++++++                                      | 24% ~45s          
  |+++++++++++++                                     | 25% ~45s          
  |++++++++++++++                                    | 26% ~44s          
  |++++++++++++++                                    | 27% ~43s          
  |+++++++++++++++                                   | 28% ~43s          
  |+++++++++++++++                                   | 29% ~42s          
  |++++++++++++++++                                  | 30% ~41s          
  |++++++++++++++++                                  | 31% ~41s          
  |+++++++++++++++++                                 | 32% ~40s          
  |+++++++++++++++++                                 | 33% ~39s          
  |++++++++++++++++++                                | 34% ~39s          
  |++++++++++++++++++                                | 35% ~38s          
  |+++++++++++++++++++                               | 36% ~37s          
  |+++++++++++++++++++                               | 38% ~37s          
  |++++++++++++++++++++                              | 39% ~36s          
  |++++++++++++++++++++                              | 40% ~35s          
  |+++++++++++++++++++++                             | 41% ~35s          
  |+++++++++++++++++++++                             | 42% ~34s          
  |++++++++++++++++++++++                            | 43% ~33s          
  |++++++++++++++++++++++                            | 44% ~33s          
  |+++++++++++++++++++++++                           | 45% ~32s          
  |+++++++++++++++++++++++                           | 46% ~32s          
  |++++++++++++++++++++++++                          | 47% ~31s          
  |++++++++++++++++++++++++                          | 48% ~30s          
  |+++++++++++++++++++++++++                         | 49% ~30s          
  |+++++++++++++++++++++++++                         | 50% ~29s          
  |++++++++++++++++++++++++++                        | 51% ~28s          
  |+++++++++++++++++++++++++++                       | 52% ~28s          
  |+++++++++++++++++++++++++++                       | 53% ~27s          
  |++++++++++++++++++++++++++++                      | 54% ~27s          
  |++++++++++++++++++++++++++++                      | 55% ~26s          
  |+++++++++++++++++++++++++++++                     | 56% ~25s          
  |+++++++++++++++++++++++++++++                     | 57% ~25s          
  |++++++++++++++++++++++++++++++                    | 58% ~24s          
  |++++++++++++++++++++++++++++++                    | 59% ~24s          
  |+++++++++++++++++++++++++++++++                   | 60% ~23s          
  |+++++++++++++++++++++++++++++++                   | 61% ~22s          
  |++++++++++++++++++++++++++++++++                  | 62% ~22s          
  |++++++++++++++++++++++++++++++++                  | 64% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
  |++++++++++++++++++++++++++++++++++                | 67% ~19s          
  |++++++++++++++++++++++++++++++++++                | 68% ~19s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~18s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~17s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~16s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~16s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~09s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=57s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~21s          
  |++                                                | 2 % ~22s          
  |++                                                | 3 % ~21s          
  |+++                                               | 4 % ~21s          
  |+++                                               | 5 % ~21s          
  |++++                                              | 7 % ~20s          
  |++++                                              | 8 % ~20s          
  |+++++                                             | 9 % ~20s          
  |+++++                                             | 10% ~19s          
  |++++++                                            | 11% ~19s          
  |++++++                                            | 12% ~19s          
  |+++++++                                           | 13% ~19s          
  |++++++++                                          | 14% ~19s          
  |++++++++                                          | 15% ~19s          
  |+++++++++                                         | 16% ~19s          
  |+++++++++                                         | 17% ~18s          
  |++++++++++                                        | 18% ~18s          
  |++++++++++                                        | 20% ~18s          
  |+++++++++++                                       | 21% ~18s          
  |+++++++++++                                       | 22% ~17s          
  |++++++++++++                                      | 23% ~17s          
  |++++++++++++                                      | 24% ~17s          
  |+++++++++++++                                     | 25% ~17s          
  |++++++++++++++                                    | 26% ~16s          
  |++++++++++++++                                    | 27% ~16s          
  |+++++++++++++++                                   | 28% ~16s          
  |+++++++++++++++                                   | 29% ~16s          
  |++++++++++++++++                                  | 30% ~16s          
  |++++++++++++++++                                  | 32% ~15s          
  |+++++++++++++++++                                 | 33% ~15s          
  |+++++++++++++++++                                 | 34% ~15s          
  |++++++++++++++++++                                | 35% ~15s          
  |++++++++++++++++++                                | 36% ~14s          
  |+++++++++++++++++++                               | 37% ~14s          
  |++++++++++++++++++++                              | 38% ~14s          
  |++++++++++++++++++++                              | 39% ~14s          
  |+++++++++++++++++++++                             | 40% ~13s          
  |+++++++++++++++++++++                             | 41% ~13s          
  |++++++++++++++++++++++                            | 42% ~13s          
  |++++++++++++++++++++++                            | 43% ~13s          
  |+++++++++++++++++++++++                           | 45% ~13s          
  |+++++++++++++++++++++++                           | 46% ~12s          
  |++++++++++++++++++++++++                          | 47% ~12s          
  |++++++++++++++++++++++++                          | 48% ~12s          
  |+++++++++++++++++++++++++                         | 49% ~11s          
  |+++++++++++++++++++++++++                         | 50% ~11s          
  |++++++++++++++++++++++++++                        | 51% ~11s          
  |+++++++++++++++++++++++++++                       | 52% ~11s          
  |+++++++++++++++++++++++++++                       | 53% ~11s          
  |++++++++++++++++++++++++++++                      | 54% ~10s          
  |++++++++++++++++++++++++++++                      | 55% ~10s          
  |+++++++++++++++++++++++++++++                     | 57% ~10s          
  |+++++++++++++++++++++++++++++                     | 58% ~10s          
  |++++++++++++++++++++++++++++++                    | 59% ~09s          
  |++++++++++++++++++++++++++++++                    | 60% ~09s          
  |+++++++++++++++++++++++++++++++                   | 61% ~09s          
  |+++++++++++++++++++++++++++++++                   | 62% ~09s          
  |++++++++++++++++++++++++++++++++                  | 63% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~08s          
  |++++++++++++++++++++++++++++++++++                | 66% ~08s          
  |++++++++++++++++++++++++++++++++++                | 67% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~05s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=23s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~33s          
  |++                                                | 2 % ~31s          
  |++                                                | 3 % ~31s          
  |+++                                               | 4 % ~31s          
  |+++                                               | 5 % ~31s          
  |++++                                              | 6 % ~30s          
  |++++                                              | 7 % ~30s          
  |+++++                                             | 8 % ~29s          
  |+++++                                             | 9 % ~29s          
  |++++++                                            | 10% ~29s          
  |++++++                                            | 11% ~28s          
  |+++++++                                           | 12% ~28s          
  |+++++++                                           | 13% ~27s          
  |++++++++                                          | 14% ~27s          
  |++++++++                                          | 15% ~27s          
  |+++++++++                                         | 16% ~26s          
  |+++++++++                                         | 18% ~26s          
  |++++++++++                                        | 19% ~25s          
  |++++++++++                                        | 20% ~25s          
  |+++++++++++                                       | 21% ~25s          
  |+++++++++++                                       | 22% ~24s          
  |++++++++++++                                      | 23% ~24s          
  |++++++++++++                                      | 24% ~24s          
  |+++++++++++++                                     | 25% ~23s          
  |+++++++++++++                                     | 26% ~23s          
  |++++++++++++++                                    | 27% ~23s          
  |++++++++++++++                                    | 28% ~22s          
  |+++++++++++++++                                   | 29% ~22s          
  |+++++++++++++++                                   | 30% ~22s          
  |++++++++++++++++                                  | 31% ~21s          
  |++++++++++++++++                                  | 32% ~21s          
  |+++++++++++++++++                                 | 33% ~21s          
  |++++++++++++++++++                                | 34% ~20s          
  |++++++++++++++++++                                | 35% ~20s          
  |+++++++++++++++++++                               | 36% ~20s          
  |+++++++++++++++++++                               | 37% ~19s          
  |++++++++++++++++++++                              | 38% ~19s          
  |++++++++++++++++++++                              | 39% ~19s          
  |+++++++++++++++++++++                             | 40% ~18s          
  |+++++++++++++++++++++                             | 41% ~18s          
  |++++++++++++++++++++++                            | 42% ~18s          
  |++++++++++++++++++++++                            | 43% ~17s          
  |+++++++++++++++++++++++                           | 44% ~17s          
  |+++++++++++++++++++++++                           | 45% ~17s          
  |++++++++++++++++++++++++                          | 46% ~16s          
  |++++++++++++++++++++++++                          | 47% ~16s          
  |+++++++++++++++++++++++++                         | 48% ~16s          
  |+++++++++++++++++++++++++                         | 49% ~15s          
  |++++++++++++++++++++++++++                        | 51% ~15s          
  |++++++++++++++++++++++++++                        | 52% ~15s          
  |+++++++++++++++++++++++++++                       | 53% ~14s          
  |+++++++++++++++++++++++++++                       | 54% ~14s          
  |++++++++++++++++++++++++++++                      | 55% ~14s          
  |++++++++++++++++++++++++++++                      | 56% ~14s          
  |+++++++++++++++++++++++++++++                     | 57% ~13s          
  |+++++++++++++++++++++++++++++                     | 58% ~13s          
  |++++++++++++++++++++++++++++++                    | 59% ~13s          
  |++++++++++++++++++++++++++++++                    | 60% ~12s          
  |+++++++++++++++++++++++++++++++                   | 61% ~12s          
  |+++++++++++++++++++++++++++++++                   | 62% ~12s          
  |++++++++++++++++++++++++++++++++                  | 63% ~11s          
  |++++++++++++++++++++++++++++++++                  | 64% ~11s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~11s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~10s          
  |++++++++++++++++++++++++++++++++++                | 67% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~09s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~09s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~07s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=30s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01m 35s      
  |++                                                | 2 % ~01m 34s      
  |++                                                | 3 % ~01m 35s      
  |+++                                               | 4 % ~01m 35s      
  |+++                                               | 5 % ~01m 35s      
  |++++                                              | 6 % ~01m 35s      
  |++++                                              | 7 % ~01m 34s      
  |+++++                                             | 8 % ~01m 33s      
  |+++++                                             | 9 % ~01m 31s      
  |++++++                                            | 10% ~01m 30s      
  |++++++                                            | 11% ~01m 29s      
  |+++++++                                           | 12% ~01m 28s      
  |+++++++                                           | 13% ~01m 27s      
  |++++++++                                          | 14% ~01m 26s      
  |++++++++                                          | 15% ~01m 25s      
  |+++++++++                                         | 16% ~01m 24s      
  |+++++++++                                         | 17% ~01m 23s      
  |++++++++++                                        | 18% ~01m 22s      
  |++++++++++                                        | 19% ~01m 21s      
  |+++++++++++                                       | 20% ~01m 20s      
  |+++++++++++                                       | 21% ~01m 18s      
  |++++++++++++                                      | 22% ~01m 18s      
  |++++++++++++                                      | 23% ~01m 17s      
  |+++++++++++++                                     | 24% ~01m 16s      
  |+++++++++++++                                     | 25% ~01m 15s      
  |++++++++++++++                                    | 26% ~01m 14s      
  |++++++++++++++                                    | 27% ~01m 13s      
  |+++++++++++++++                                   | 28% ~01m 12s      
  |+++++++++++++++                                   | 29% ~01m 11s      
  |++++++++++++++++                                  | 30% ~01m 10s      
  |++++++++++++++++                                  | 31% ~01m 09s      
  |+++++++++++++++++                                 | 32% ~01m 07s      
  |+++++++++++++++++                                 | 33% ~01m 06s      
  |++++++++++++++++++                                | 34% ~01m 06s      
  |++++++++++++++++++                                | 35% ~01m 04s      
  |+++++++++++++++++++                               | 36% ~01m 04s      
  |+++++++++++++++++++                               | 37% ~01m 03s      
  |++++++++++++++++++++                              | 38% ~01m 01s      
  |++++++++++++++++++++                              | 39% ~01m 00s      
  |+++++++++++++++++++++                             | 40% ~59s          
  |+++++++++++++++++++++                             | 41% ~58s          
  |++++++++++++++++++++++                            | 42% ~57s          
  |++++++++++++++++++++++                            | 43% ~56s          
  |+++++++++++++++++++++++                           | 44% ~55s          
  |+++++++++++++++++++++++                           | 45% ~54s          
  |++++++++++++++++++++++++                          | 46% ~53s          
  |++++++++++++++++++++++++                          | 47% ~52s          
  |+++++++++++++++++++++++++                         | 48% ~51s          
  |+++++++++++++++++++++++++                         | 49% ~50s          
  |++++++++++++++++++++++++++                        | 51% ~49s          
  |++++++++++++++++++++++++++                        | 52% ~48s          
  |+++++++++++++++++++++++++++                       | 53% ~47s          
  |+++++++++++++++++++++++++++                       | 54% ~46s          
  |++++++++++++++++++++++++++++                      | 55% ~45s          
  |++++++++++++++++++++++++++++                      | 56% ~44s          
  |+++++++++++++++++++++++++++++                     | 57% ~43s          
  |+++++++++++++++++++++++++++++                     | 58% ~42s          
  |++++++++++++++++++++++++++++++                    | 59% ~41s          
  |++++++++++++++++++++++++++++++                    | 60% ~40s          
  |+++++++++++++++++++++++++++++++                   | 61% ~39s          
  |+++++++++++++++++++++++++++++++                   | 62% ~38s          
  |++++++++++++++++++++++++++++++++                  | 63% ~37s          
  |++++++++++++++++++++++++++++++++                  | 64% ~36s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~35s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~34s          
  |++++++++++++++++++++++++++++++++++                | 67% ~33s          
  |++++++++++++++++++++++++++++++++++                | 68% ~32s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~31s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~30s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~29s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~28s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~27s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~26s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~25s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~24s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~23s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~22s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~21s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~20s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~19s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~18s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~17s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~16s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~15s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~14s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 38s
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~21s          
  |+                                                 | 2 % ~22s          
  |++                                                | 3 % ~21s          
  |++                                                | 4 % ~22s          
  |+++                                               | 5 % ~21s          
  |+++                                               | 6 % ~21s          
  |++++                                              | 7 % ~21s          
  |++++                                              | 8 % ~21s          
  |+++++                                             | 9 % ~21s          
  |+++++                                             | 10% ~21s          
  |++++++                                            | 11% ~20s          
  |++++++                                            | 12% ~20s          
  |+++++++                                           | 13% ~20s          
  |+++++++                                           | 14% ~20s          
  |++++++++                                          | 15% ~20s          
  |++++++++                                          | 16% ~19s          
  |+++++++++                                         | 17% ~19s          
  |+++++++++                                         | 18% ~19s          
  |++++++++++                                        | 19% ~19s          
  |++++++++++                                        | 20% ~18s          
  |+++++++++++                                       | 21% ~18s          
  |+++++++++++                                       | 22% ~18s          
  |++++++++++++                                      | 23% ~18s          
  |++++++++++++                                      | 24% ~17s          
  |+++++++++++++                                     | 25% ~17s          
  |+++++++++++++                                     | 26% ~17s          
  |++++++++++++++                                    | 27% ~17s          
  |++++++++++++++                                    | 28% ~16s          
  |+++++++++++++++                                   | 29% ~16s          
  |+++++++++++++++                                   | 30% ~16s          
  |++++++++++++++++                                  | 31% ~16s          
  |++++++++++++++++                                  | 32% ~16s          
  |+++++++++++++++++                                 | 33% ~15s          
  |+++++++++++++++++                                 | 34% ~15s          
  |++++++++++++++++++                                | 35% ~15s          
  |++++++++++++++++++                                | 36% ~15s          
  |+++++++++++++++++++                               | 37% ~15s          
  |+++++++++++++++++++                               | 38% ~14s          
  |++++++++++++++++++++                              | 39% ~14s          
  |++++++++++++++++++++                              | 40% ~14s          
  |+++++++++++++++++++++                             | 41% ~14s          
  |+++++++++++++++++++++                             | 42% ~13s          
  |++++++++++++++++++++++                            | 43% ~13s          
  |++++++++++++++++++++++                            | 44% ~13s          
  |+++++++++++++++++++++++                           | 45% ~13s          
  |+++++++++++++++++++++++                           | 46% ~12s          
  |++++++++++++++++++++++++                          | 47% ~12s          
  |++++++++++++++++++++++++                          | 48% ~12s          
  |+++++++++++++++++++++++++                         | 49% ~12s          
  |+++++++++++++++++++++++++                         | 50% ~12s          
  |++++++++++++++++++++++++++                        | 51% ~11s          
  |++++++++++++++++++++++++++                        | 52% ~11s          
  |+++++++++++++++++++++++++++                       | 53% ~11s          
  |+++++++++++++++++++++++++++                       | 54% ~11s          
  |++++++++++++++++++++++++++++                      | 55% ~10s          
  |++++++++++++++++++++++++++++                      | 56% ~10s          
  |+++++++++++++++++++++++++++++                     | 57% ~10s          
  |+++++++++++++++++++++++++++++                     | 58% ~10s          
  |++++++++++++++++++++++++++++++                    | 59% ~09s          
  |++++++++++++++++++++++++++++++                    | 60% ~09s          
  |+++++++++++++++++++++++++++++++                   | 61% ~09s          
  |+++++++++++++++++++++++++++++++                   | 62% ~09s          
  |++++++++++++++++++++++++++++++++                  | 63% ~09s          
  |++++++++++++++++++++++++++++++++                  | 64% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~08s          
  |++++++++++++++++++++++++++++++++++                | 67% ~08s          
  |++++++++++++++++++++++++++++++++++                | 68% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~05s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=23s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~20s          
  |++                                                | 2 % ~20s          
  |++                                                | 3 % ~20s          
  |+++                                               | 5 % ~29s          
  |+++                                               | 6 % ~27s          
  |++++                                              | 7 % ~25s          
  |+++++                                             | 8 % ~24s          
  |+++++                                             | 9 % ~24s          
  |++++++                                            | 10% ~23s          
  |++++++                                            | 11% ~22s          
  |+++++++                                           | 13% ~22s          
  |+++++++                                           | 14% ~21s          
  |++++++++                                          | 15% ~20s          
  |+++++++++                                         | 16% ~20s          
  |+++++++++                                         | 17% ~19s          
  |++++++++++                                        | 18% ~19s          
  |++++++++++                                        | 20% ~19s          
  |+++++++++++                                       | 21% ~18s          
  |+++++++++++                                       | 22% ~18s          
  |++++++++++++                                      | 23% ~18s          
  |+++++++++++++                                     | 24% ~17s          
  |+++++++++++++                                     | 25% ~17s          
  |++++++++++++++                                    | 26% ~17s          
  |++++++++++++++                                    | 28% ~16s          
  |+++++++++++++++                                   | 29% ~16s          
  |+++++++++++++++                                   | 30% ~16s          
  |++++++++++++++++                                  | 31% ~15s          
  |+++++++++++++++++                                 | 32% ~15s          
  |+++++++++++++++++                                 | 33% ~15s          
  |++++++++++++++++++                                | 34% ~15s          
  |++++++++++++++++++                                | 36% ~14s          
  |+++++++++++++++++++                               | 37% ~14s          
  |+++++++++++++++++++                               | 38% ~14s          
  |++++++++++++++++++++                              | 39% ~13s          
  |+++++++++++++++++++++                             | 40% ~13s          
  |+++++++++++++++++++++                             | 41% ~13s          
  |++++++++++++++++++++++                            | 43% ~13s          
  |++++++++++++++++++++++                            | 44% ~12s          
  |+++++++++++++++++++++++                           | 45% ~12s          
  |+++++++++++++++++++++++                           | 46% ~12s          
  |++++++++++++++++++++++++                          | 47% ~12s          
  |+++++++++++++++++++++++++                         | 48% ~11s          
  |+++++++++++++++++++++++++                         | 49% ~11s          
  |++++++++++++++++++++++++++                        | 51% ~11s          
  |++++++++++++++++++++++++++                        | 52% ~10s          
  |+++++++++++++++++++++++++++                       | 53% ~10s          
  |++++++++++++++++++++++++++++                      | 54% ~10s          
  |++++++++++++++++++++++++++++                      | 55% ~10s          
  |+++++++++++++++++++++++++++++                     | 56% ~09s          
  |+++++++++++++++++++++++++++++                     | 57% ~09s          
  |++++++++++++++++++++++++++++++                    | 59% ~09s          
  |++++++++++++++++++++++++++++++                    | 60% ~09s          
  |+++++++++++++++++++++++++++++++                   | 61% ~08s          
  |++++++++++++++++++++++++++++++++                  | 62% ~08s          
  |++++++++++++++++++++++++++++++++                  | 63% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~08s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~07s          
  |++++++++++++++++++++++++++++++++++                | 67% ~07s          
  |++++++++++++++++++++++++++++++++++                | 68% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~07s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~06s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~06s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~05s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~05s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~05s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=21s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01m 00s      
  |++                                                | 2 % ~59s          
  |++                                                | 3 % ~01m 01s      
  |+++                                               | 4 % ~60s          
  |+++                                               | 5 % ~01m 01s      
  |++++                                              | 6 % ~01m 01s      
  |++++                                              | 7 % ~01m 01s      
  |+++++                                             | 8 % ~01m 00s      
  |+++++                                             | 9 % ~59s          
  |++++++                                            | 11% ~58s          
  |++++++                                            | 12% ~57s          
  |+++++++                                           | 13% ~57s          
  |+++++++                                           | 14% ~56s          
  |++++++++                                          | 15% ~55s          
  |++++++++                                          | 16% ~55s          
  |+++++++++                                         | 17% ~54s          
  |+++++++++                                         | 18% ~53s          
  |++++++++++                                        | 19% ~53s          
  |++++++++++                                        | 20% ~52s          
  |+++++++++++                                       | 21% ~51s          
  |++++++++++++                                      | 22% ~50s          
  |++++++++++++                                      | 23% ~50s          
  |+++++++++++++                                     | 24% ~49s          
  |+++++++++++++                                     | 25% ~48s          
  |++++++++++++++                                    | 26% ~47s          
  |++++++++++++++                                    | 27% ~48s          
  |+++++++++++++++                                   | 28% ~47s          
  |+++++++++++++++                                   | 29% ~46s          
  |++++++++++++++++                                  | 31% ~46s          
  |++++++++++++++++                                  | 32% ~45s          
  |+++++++++++++++++                                 | 33% ~44s          
  |+++++++++++++++++                                 | 34% ~44s          
  |++++++++++++++++++                                | 35% ~43s          
  |++++++++++++++++++                                | 36% ~42s          
  |+++++++++++++++++++                               | 37% ~41s          
  |+++++++++++++++++++                               | 38% ~41s          
  |++++++++++++++++++++                              | 39% ~40s          
  |++++++++++++++++++++                              | 40% ~39s          
  |+++++++++++++++++++++                             | 41% ~38s          
  |++++++++++++++++++++++                            | 42% ~38s          
  |++++++++++++++++++++++                            | 43% ~37s          
  |+++++++++++++++++++++++                           | 44% ~36s          
  |+++++++++++++++++++++++                           | 45% ~36s          
  |++++++++++++++++++++++++                          | 46% ~35s          
  |++++++++++++++++++++++++                          | 47% ~34s          
  |+++++++++++++++++++++++++                         | 48% ~33s          
  |+++++++++++++++++++++++++                         | 49% ~33s          
  |++++++++++++++++++++++++++                        | 51% ~32s          
  |++++++++++++++++++++++++++                        | 52% ~31s          
  |+++++++++++++++++++++++++++                       | 53% ~31s          
  |+++++++++++++++++++++++++++                       | 54% ~30s          
  |++++++++++++++++++++++++++++                      | 55% ~29s          
  |++++++++++++++++++++++++++++                      | 56% ~29s          
  |+++++++++++++++++++++++++++++                     | 57% ~28s          
  |+++++++++++++++++++++++++++++                     | 58% ~27s          
  |++++++++++++++++++++++++++++++                    | 59% ~27s          
  |++++++++++++++++++++++++++++++                    | 60% ~26s          
  |+++++++++++++++++++++++++++++++                   | 61% ~25s          
  |++++++++++++++++++++++++++++++++                  | 62% ~24s          
  |++++++++++++++++++++++++++++++++                  | 63% ~24s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~23s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~22s          
  |++++++++++++++++++++++++++++++++++                | 66% ~22s          
  |++++++++++++++++++++++++++++++++++                | 67% ~21s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~20s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~19s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~18s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~18s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~17s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~16s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~16s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~15s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~14s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~14s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~13s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~12s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~12s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~10s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~09s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 05s
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~36s          
  |++                                                | 2 % ~35s          
  |++                                                | 3 % ~35s          
  |+++                                               | 4 % ~35s          
  |+++                                               | 5 % ~34s          
  |++++                                              | 6 % ~33s          
  |++++                                              | 7 % ~33s          
  |+++++                                             | 9 % ~33s          
  |+++++                                             | 10% ~32s          
  |++++++                                            | 11% ~32s          
  |++++++                                            | 12% ~31s          
  |+++++++                                           | 13% ~31s          
  |+++++++                                           | 14% ~31s          
  |++++++++                                          | 15% ~30s          
  |++++++++                                          | 16% ~30s          
  |+++++++++                                         | 17% ~29s          
  |++++++++++                                        | 18% ~29s          
  |++++++++++                                        | 19% ~29s          
  |+++++++++++                                       | 20% ~29s          
  |+++++++++++                                       | 21% ~28s          
  |++++++++++++                                      | 22% ~28s          
  |++++++++++++                                      | 23% ~27s          
  |+++++++++++++                                     | 24% ~27s          
  |+++++++++++++                                     | 26% ~27s          
  |++++++++++++++                                    | 27% ~26s          
  |++++++++++++++                                    | 28% ~26s          
  |+++++++++++++++                                   | 29% ~25s          
  |+++++++++++++++                                   | 30% ~25s          
  |++++++++++++++++                                  | 31% ~25s          
  |++++++++++++++++                                  | 32% ~24s          
  |+++++++++++++++++                                 | 33% ~24s          
  |++++++++++++++++++                                | 34% ~24s          
  |++++++++++++++++++                                | 35% ~23s          
  |+++++++++++++++++++                               | 36% ~23s          
  |+++++++++++++++++++                               | 37% ~23s          
  |++++++++++++++++++++                              | 38% ~22s          
  |++++++++++++++++++++                              | 39% ~22s          
  |+++++++++++++++++++++                             | 40% ~22s          
  |+++++++++++++++++++++                             | 41% ~21s          
  |++++++++++++++++++++++                            | 43% ~21s          
  |++++++++++++++++++++++                            | 44% ~21s          
  |+++++++++++++++++++++++                           | 45% ~20s          
  |+++++++++++++++++++++++                           | 46% ~20s          
  |++++++++++++++++++++++++                          | 47% ~19s          
  |++++++++++++++++++++++++                          | 48% ~19s          
  |+++++++++++++++++++++++++                         | 49% ~19s          
  |+++++++++++++++++++++++++                         | 50% ~18s          
  |++++++++++++++++++++++++++                        | 51% ~18s          
  |+++++++++++++++++++++++++++                       | 52% ~18s          
  |+++++++++++++++++++++++++++                       | 53% ~17s          
  |++++++++++++++++++++++++++++                      | 54% ~17s          
  |++++++++++++++++++++++++++++                      | 55% ~16s          
  |+++++++++++++++++++++++++++++                     | 56% ~16s          
  |+++++++++++++++++++++++++++++                     | 57% ~16s          
  |++++++++++++++++++++++++++++++                    | 59% ~15s          
  |++++++++++++++++++++++++++++++                    | 60% ~15s          
  |+++++++++++++++++++++++++++++++                   | 61% ~14s          
  |+++++++++++++++++++++++++++++++                   | 62% ~14s          
  |++++++++++++++++++++++++++++++++                  | 63% ~14s          
  |++++++++++++++++++++++++++++++++                  | 64% ~13s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~13s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~12s          
  |++++++++++++++++++++++++++++++++++                | 67% ~12s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~12s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~11s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~11s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~11s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~10s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~10s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~09s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~09s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~09s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~08s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=36s  
library(enrichR)
Welcome to enrichR
Checking connection ... 
Enrichr ... Connection is Live!
FlyEnrichr ... Connection is available!
WormEnrichr ... Connection is available!
YeastEnrichr ... Connection is available!
FishEnrichr ... Connection is available!
OxEnrichr ... Connection is available!
setEnrichrSite("Enrichr") # Human genes
Connection changed to https://maayanlab.cloud/Enrichr/
Connection is Live!
# list of all the databases
# get the possible libraries
dbs <- listEnrichrDbs()

# this will list the possible libraries
dbs

# select libraries with cell types
db <- c('CellMarker_Augmented_2021','Azimuth_Cell_Types_2021')

# function for a quick look
checkCelltypes <- function(cluster_num = 0){
  clusterX <- ClusterMarkers %>% filter(cluster == cluster_num & avg_log2FC > 0.25)
  genes <- clusterX$gene
  # the cell type libraries
  # get the results for each library
  clusterX.cell <- enrichr(genes, databases = db)
  # visualize the results
print(plotEnrich(clusterX.cell[[1]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'CellMarker_Augmented_2021'))
print(plotEnrich(clusterX.cell[[2]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'Azimuth_Cell_Types_2021'))

}

Top markers


top5


top2 <- ClusterMarkers %>% group_by(cluster) %>% top_n(n=2, wt =avg_log2FC)
DoHeatmap(seu, features = top5$gene, size = 3, angle = 90, group.by = "integrated_snn_res.0.3")


DoHeatmap(seu, features = top2$gene, size = 3, angle = 90, group.by = "integrated_snn_res.0.3")

quick check EnrichR


checkCelltypes(cluster_num = 11)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

Add annotations

DimPlot(seu, label = FALSE, group.by = "DiseaseStatus")

Save the annotated neurons


saveRDS(seu, "/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Ex2_48well/Ex2NeuronsIntPDandHC.RDS")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKI2xpYnJhcnkoQ2VsbHR5cGVSKQpgYGAKCgoKYGBge3J9CnNldSA8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9QYXJzZUV4YW1wbGUvRXgyXzQ4d2VsbC9QYXJzZTQ4X2FuYWx5c2lzTWFyaWEuUkRTIikKCnVuaXF1ZShzZXUkc2FtcGxlKQoKSWRlbnRzKHNldSkgPC0gInNhbXBsZSIKbGV2ZWxzKHNldSkKCnNhbXBsZXMgPC0gbGV2ZWxzKHNldSkKc2FtcGxlcwoKYGBgCgpBZGQgbWV0YSBkYXRhIGluZm9ybWF0aW9uCgpgYGB7cn0KIyB1c2luZyBjZWxsdHlwZVIgZnVuY3Rpb24KCiMgYWRkIHRoZSBjdWx0dXJlIHR5cGUgTlBDLCBEQSBuZXVyb25zIDJ3ZWVrcywgTW90b3IgbmV1cm9ucwpuZXdfdmVjdG9yIDwtIGlmZWxzZShncmVwbCgiTlBDIiwgc2FtcGxlcyksICJOUEMiLAogICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIkZpbmFsIiwgc2FtcGxlcyksICJOZXVyb25zMndlZWtzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiXk0iLCBzYW1wbGVzKSwgIk1vdG9yTmV1cm9ucyIsICJPdGhlciIpKSkKCiMgUHJpbnQgdGhlIG5ldyB2ZWN0b3IKcHJpbnQobmV3X3ZlY3RvcikKCnNldSA8LSBhbm5vdGF0ZShzZXUsIGFubm90YXRpb25zID0gbmV3X3ZlY3RvciwgdG9fbGFiZWwgPSAic2FtcGxlIixhbm5vdGF0aW9uX25hbWUgPSAiQ3VsdHVyZVR5cGUiKQoKRGltUGxvdChzZXUpCgojIGNoZWNrIHdpdGggc2FtcGxlIG5hbWVzCgp0YWJsZShzZXUkc2FtcGxlLCBzZXUkQ3VsdHVyZVR5cGUpCgoKYGBgCgpBZGQgdGhlIGxpbmVzIGFuZCB0aGVuIHRoZSBkaXNlYXNlcyBzdGF0dXMKCmBgYHtyfQoKICAjIENyZWF0ZSBhIG5ldyB2ZWN0b3Igd2l0aCBsaW5lIG5hbWVzCm5ld19saW5lX3ZlY3RvciA8LSBnc3ViKCJeKE5QQ3xGaW5hbCkiLCAiIiwgc2FtcGxlcykKbmV3X2xpbmVfdmVjdG9yIDwtIGdzdWIoIjMxMjMkIiwgIjMxMjMtaXNvIiwgbmV3X2xpbmVfdmVjdG9yKQpuZXdfbGluZV92ZWN0b3JbbmV3X2xpbmVfdmVjdG9yID09ICJQNjVQIl0gPC0gIjMxMjMtaXNvUDY1UCIKbmV3X2xpbmVfdmVjdG9yW25ld19saW5lX3ZlY3RvciA9PSAiUTY1USJdIDwtICIzMTIzLWlzb1E2NVEiCgojIFByaW50IHRoZSBuZXcgdmVjdG9yIHdpdGggbGluZSBuYW1lcwoKCm5ld19saW5lX3ZlY3RvcltuZXdfbGluZV92ZWN0b3IgPT0gIjJBSVcwMDItMDIiXSA8LSAiQUlXMDAyLTAyIgoKcHJpbnQobmV3X2xpbmVfdmVjdG9yKQoKc2V1IDwtIGFubm90YXRlKHNldSwgYW5ub3RhdGlvbnMgPSBuZXdfbGluZV92ZWN0b3IsIHRvX2xhYmVsID0gInNhbXBsZSIsYW5ub3RhdGlvbl9uYW1lID0gIkxpbmUiKQoKCiMgY2hlY2sKdGFibGUoc2V1JHNhbXBsZSwgc2V1JExpbmUpCgpgYGAKYGBge3IsIGZpZy53aWR0aD02fQpEaW1QbG90KHNldSkKYGBgCgoKYGBge3J9CiMgYWRkIGRpc2Vhc2Ugc3RhdHVzCgojIENyZWF0ZSB0aGUgbG9va3VwIHRhYmxlIGZvciBMaW5lIHRvIERpc2Vhc2VTdGF0dXMgbWFwcGluZwpsaW5lX3RvX2Rpc2Vhc2UgPC0gYygiMzQ0OCIgPSAiSEMiLAogICAgICAgICAgICAgICAgICAgICAiVEQyMiIgPSAiSEMiLAogICAgICAgICAgICAgICAgICAgICAiQUlXMDAxLTAyIiA9ICJIQyIsCiAgICAgICAgICAgICAgICAgICAgICJBSVcwMDItMDIiID0gIkhDIiwKICAgICAgICAgICAgICAgICAgICAgIjI5NjUiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjMzODMiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjM1NzUiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIlREMDYiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIlREMDciID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjMxMjMiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjM1NjciID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjM1OTUiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjM5NDAiID0gIlBEIiwKICAgICAgICAgICAgICAgICAgICAgIjM1NjctaXNvIiA9ICJQRC1pc28iLAogICAgICAgICAgICAgICAgICAgICAiMzk0MFItaXNvIiA9ICJQRC1pc28iLAogICAgICAgICAgICAgICAgICAgICAiVEQwNi1pc28iID0gIlBELWlzbyIsCiAgICAgICAgICAgICAgICAgICAgICIzOTQwTi1pc28iID0gIlBELWlzbyIsCiAgICAgICAgICAgICAgICAgICAgICIzMTIzLWlzb1E2NVEiID0gIlBELWlzbyIsCiAgICAgICAgICAgICAgICAgICAgICIzMTIzLWlzb1A2NVAiID0gIlBELWlzbyIsCiAgICAgICAgICAgICAgICAgICAgICIzMTIzLWlzbyIgPSAiUEQtaXNvIiwKICAgICAgICAgICAgICAgICAgICAgIjMzODMtaXNvIiA9ICJQRC1pc28iLAogICAgICAgICAgICAgICAgICAgICAiMzU3NS1pc28iID0gIlBELWlzbyIsCiAgICAgICAgICAgICAgICAgICAgICIzNTk1LWlzbyIgPSAiUEQtaXNvIikKCiMgQXNzdW1pbmcgIkxpbmUiIGlzIHlvdXIgc3RhcnRpbmcgY2hhcmFjdGVyIHZlY3RvcgpJZGVudHMoc2V1KSA8LSAiTGluZSIKTGluZSA8LSBsZXZlbHMoc2V1KQojIENyZWF0ZSBhIG5ldyB2ZWN0b3Igb2YgZGlzZWFzZSBzdGF0dXNlcyB1c2luZyB0aGUgbG9va3VwIHRhYmxlCmRpc2Vhc2Vfc3RhdHVzX3ZlY3RvciA8LSBpZmVsc2UoTGluZSAlaW4lIG5hbWVzKGxpbmVfdG9fZGlzZWFzZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfdG9fZGlzZWFzZVtMaW5lXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIikKCiMgUHJpbnQgdGhlIG5ldyB2ZWN0b3Igb2YgZGlzZWFzZSBzdGF0dXNlcwpwcmludChkaXNlYXNlX3N0YXR1c192ZWN0b3IpCgpzZXUgPC0gYW5ub3RhdGUoc2V1LCBhbm5vdGF0aW9ucyA9IGRpc2Vhc2Vfc3RhdHVzX3ZlY3RvciwgdG9fbGFiZWwgPSAiTGluZSIsYW5ub3RhdGlvbl9uYW1lID0gIkRpc2Vhc2VTdGF0dXMiKQoKCiMgY2hlY2sKdGFibGUoc2V1JExpbmUsIHNldSREaXNlYXNlU3RhdHVzKQoKCmBgYAoKYGBge3J9CmNlbGxjb3VudHMgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShzZXUkTGluZSxzZXUkQ3VsdHVyZVR5cGUpKQp0YWJsZShzZXUkTGluZSxzZXUkQ3VsdHVyZVR5cGUsc2V1JERpc2Vhc2VTdGF0dXMpCgojIENvbnZlcnQgbG9uZ19kZiB0byB0aGUgd2lkZSBmb3JtYXQKd2lkZV9kZiA8LSBwaXZvdF93aWRlcihjZWxsY291bnRzLCAKICAgICAgICAgICAgICAgICAgICAgICBpZF9jb2xzID0gVmFyMSwgCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfZnJvbSA9IFZhcjIsIAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gRnJlcSkKCndyaXRlLmNzdih3aWRlX2RmLCJjZWxsY291bnRzX3NhbXBsZS5jc3YiKQoKYGBgCgpgYGB7cn0KRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIkRpc2Vhc2VTdGF0dXMiKQoKYGBgCgoKCgpTdWJzZXQgZm9yIHRvIHJlbW92ZSBwb29scyBhbmQgTWFyaWEncyBzYW1wbGVzCgpgYGB7cn0KdW5pcXVlKHNldSRzYW1wbGUpCklkZW50cyhzZXUpIDwtICJEaXNlYXNlU3RhdHVzIgoKc2V1Lm4gPC0gc3Vic2V0KHNldSwgaWRlbnRzID0gYygiSEMiLCJQRCIsIlBELWlzbyIpKQpkaW0oc2V1Lm4pCmRpbShzZXUpCgpEaW1QbG90KHNldS5uKQoKYGBgClJlcHJvY2VzcyBzdWJzZXQKCmBgYHtyfQoKc2V1Lm4gPC0gUnVuUENBKHNldS5uLCBucGNzID0gMjAsIHZlcmJvc2UgPSBGQUxTRSkKc2V1Lm4gPC0gUnVuVU1BUChzZXUubiwgcmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjIwLCBuLm5laWdoYm9ycyA9IDgxKQpEaW1QbG90KHNldS5uKQpzZXUubiRDdWx0dXJlVHlwZQpEaW1QbG90KHNldS5uLCBncm91cC5ieSA9ICJDdWx0dXJlVHlwZSIpCkRpbVBsb3Qoc2V1Lm4sIGdyb3VwLmJ5ID0gIkxpbmUiKQoKYGBgCgpgYGB7cn0Kc2V1Lm4gPC0gcmVhZFJEUygiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2VOQ0FERHNhbXBsZXMuUkRTIikKICAKYGBgCgoKCkdldCBjbHVzdGVycwoKYGBge3J9CnNldS5uIDwtIE5vcm1hbGl6ZURhdGEoc2V1Lm4pCnNldS5uIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKHNldS5uKQpzZXUubiA8LSBGaW5kTmVpZ2hib3JzKHNldS5uLCBkaW1zID0gMToyMCwgay5wYXJhbSA9IDgxKQpzZXUubiA8LSBGaW5kQ2x1c3RlcnMoc2V1Lm4sIHJlc29sdXRpb24gPSAwLjMpCkRpbVBsb3Qoc2V1Lm4sIGdyb3VwLmJ5ID0gIlJOQV9zbm5fcmVzLjAuMyIpCiNzZXUubiRSTkFfc25uX3Jlcy4wLjMKRGltUGxvdChzZXUubiwgZ3JvdXAuYnkgPSAiQ3VsdHVyZVR5cGUiKQoKYGBgCgoKCgoKU3Vic2V0IG91dCBuZXVyb25zIGFuZCBOUEMKCmBgYHtyfQoKI3NldS5uJEN1bHR1cmVUeXBlCklkZW50cyhzZXUubikgPC0gIkN1bHR1cmVUeXBlIgpuZXVyb25zIDwtIHN1YnNldChzZXUubiwgaWRlbnRzID0gIk5ldXJvbnMyd2Vla3MiKQoKSWRlbnRzKHNldS5uKSA8LSAiQ3VsdHVyZVR5cGUiCk5QQyA8LSBzdWJzZXQoc2V1Lm4sIGlkZW50cyA9ICJOUEMiKQoKYGBgCgpgYGB7cn0KCnNldSA8LSBuZXVyb25zCnNldSA8LSBSdW5QQ0Eoc2V1LCBucGNzID0gMjAsIHZlcmJvc2UgPSBGQUxTRSkKc2V1IDwtIFJ1blVNQVAoc2V1LCByZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MjAsIG4ubmVpZ2hib3JzID0gODEpCnNldSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzZXUpCnNldSA8LSBGaW5kTmVpZ2hib3JzKHNldSwgZGltcyA9IDE6MjAsIGsucGFyYW0gPSA4MSkKc2V1IDwtIEZpbmRDbHVzdGVycyhzZXUsIHJlc29sdXRpb24gPSAwLjMpCkRpbVBsb3Qoc2V1KQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiQ3VsdHVyZVR5cGUiKQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiTGluZSIpCgpuZXVyb25zIDwtIHNldQoKYGBgCgoKCmBgYHtyfQpzZXUgPC0gTlBDCnNldSA8LSBSdW5QQ0Eoc2V1LCBucGNzID0gMjAsIHZlcmJvc2UgPSBGQUxTRSkKc2V1IDwtIFJ1blVNQVAoc2V1LCByZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MjAsIG4ubmVpZ2hib3JzID0gODEpCnNldSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzZXUpCnNldSA8LSBGaW5kTmVpZ2hib3JzKHNldSwgZGltcyA9IDE6MjAsIGsucGFyYW0gPSA4MSkKc2V1IDwtIEZpbmRDbHVzdGVycyhzZXUsIHJlc29sdXRpb24gPSAwLjMpCkRpbVBsb3Qoc2V1KQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiQ3VsdHVyZVR5cGUiKQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiTGluZSIpCgpOUEMgPC0gc2V1CgpEaW1QbG90KE5QQywgZ3JvdXAuYnkgPSAiRGlzZWFzZVN0YXR1cyIpCgpgYGAKCgoKc2F2ZSBvYmplY3RzIApgYGB7cn0KCnNhdmVSRFMoc2V1LCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2U0OF9hbGxTYW1wbGVzLlJEUyIpCgpzYXZlUkRTKHNldS5uLCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2VOQ0FERHNhbXBsZXMuUkRTIikKc2F2ZVJEUyhuZXVyb25zLCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2VOQ0FERHNhbXBsZXNOZXVyb25zLlJEUyIpCnNhdmVSRFMoTlBDLCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2VOQ0FERHNhbXBsZXNOUEMuUkRTIikKCgpuZXVyb25zIDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeDJfNDh3ZWxsL1BhcnNlTkNBRERzYW1wbGVzTmV1cm9ucy5SRFMiKQoKCmBgYAoKYGBge3J9CnRhYmxlKG5ldXJvbnMkTGluZSkKSWRlbnRzKG5ldXJvbnMpIDwtICJMaW5lIgpsZXZlbHMobmV1cm9ucykKdGFibGUobmV1cm9ucyREaXNlYXNlU3RhdHVzLG5ldXJvbnMkTGluZSkKCmBgYAoKTm93IGludGVncmF0ZSBzYW1wbGVzCgpgYGB7cn0KCiMgQWxsIHNhbXBsZXMgaXMgdG9vIGxhcmdlIHRvIGludGVncmF0ZSAKCklkZW50cyhuZXVyb25zKSA8LSAiRGlzZWFzZVN0YXR1cyIKbGV2ZWxzKG5ldXJvbnMpCm5ldXIuUEQgPC0gc3Vic2V0KG5ldXJvbnMsIGlkZW50cyA9ICJQRCIpCm5ldXIuUERpc28gPC0gc3Vic2V0KG5ldXJvbnMsIGlkZW50cyA9ICJQRC1pc28iKQpuZXVyLkhDIDwtIHN1YnNldChuZXVyb25zLCBpZGVudHMgPSAiSEMiKQoKIyBtYWtlIGEgbGlzdCBvZiBzZXVyYXQgb2JqZWN0cyBieSBvdXIgY2VsbCB0eXBlIHZhcmlhYmxlCiMgd2lsbCBpbnRlZ3JhdGUgdGhlIFBELCBQRC1pc28sIEhDIHNlcGFyYXRlbHkgYW5kIHRoZW4gbWVyZ2UgdGhlbSB3aWxsIHNlZSBpZiB3aWxsIGludGVncmF0ZSBvciBub3QKCmBgYAoKYGBge3J9CiMgYW4gaW50ZWdyYXRlIGZ1bmN0aW9uCgojIERlZmluZSBhIGZ1bmN0aW9uIGZvciBpbnRlZ3JhdGluZyBhIGxpc3Qgb2YgU2V1cmF0IG9iamVjdHMKaW50ZWdyYXRlX3NldXJhdF9vYmplY3RzIDwtIGZ1bmN0aW9uKHNldXJhdF9saXN0LCBkaW1zID0gMTozMCkgewogICMgTm9ybWFsaXplIGFuZCBmaW5kIHZhcmlhYmxlIGZlYXR1cmVzIGZvciBlYWNoIG9iamVjdAogIGZvciAoaSBpbiAxOmxlbmd0aChzZXVyYXRfbGlzdCkpIHsKICAgIHNldXJhdF9saXN0W1tpXV0gPC0gTm9ybWFsaXplRGF0YShzZXVyYXRfbGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgICBzZXVyYXRfbGlzdFtbaV1dIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKHNldXJhdF9saXN0W1tpXV0sIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IikKICB9CgogICMgQ3JlYXRlIGFuIGVtcHR5IFNldXJhdCBvYmplY3QgdG8gc3RvcmUgdGhlIGludGVncmF0ZWQgZGF0YQogIGludGVncmF0ZWRfc2V1cmF0IDwtIHN1YnNldChzZXVyYXRfbGlzdFtbMV1dKQoKICAjIEl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBTZXVyYXQgb2JqZWN0cwogIGZvciAoaSBpbiAxOmxlbmd0aChzZXVyYXRfbGlzdCkpIHsKICAgICMgUmVuYW1lIHRoZSAnb3JpZy5pZGVudCcgbWV0YWRhdGEgaW5zaWRlIHRoZSBTZXVyYXQgb2JqZWN0IHRvIG1hdGNoIHRoZSBvYmplY3QgbmFtZSBpbiB0aGUgbGlzdAogICAgc2V1cmF0X2xpc3RbW2ldXSRvcmlnLmlkZW50IDwtIG5hbWVzKHNldXJhdF9saXN0KVtpXQogIH0KCiAgc2FtcGxlLmxpc3QgPC0gc2V1cmF0X2xpc3QKICBmb3IgKGkgaW4gMTpsZW5ndGgoc2FtcGxlLmxpc3QpKSB7CiAgICAjIE5vcm1hbGl6ZSBhbmQgc2NhbGUgdGhlIGRhdGEKICAgIHNhbXBsZS5saXN0W1tpXV0gPC0gTm9ybWFsaXplRGF0YShzYW1wbGUubGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgICBzYW1wbGUubGlzdFtbaV1dIDwtIFNjYWxlRGF0YShzYW1wbGUubGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgICAjIEZpbmQgdmFyaWFibGUgZmVhdHVyZXMKICAgIHNhbXBsZS5saXN0W1tpXV0gPC0gRmluZFZhcmlhYmxlRmVhdHVyZXMoc2FtcGxlLmxpc3RbW2ldXSwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiKQogICAgIyBHZXQgdGhlIHZhcmlhYmxlIGZlYXR1cmVzCiAgICB2YXJpYWJsZV9mZWF0dXJlcyA8LSBWYXJpYWJsZUZlYXR1cmVzKHNhbXBsZS5saXN0W1tpXV0pCiAgICAjIFJ1biBQQ0Egd2l0aCB0aGUgdmFyaWFibGUgZmVhdHVyZXMKICAgIHNhbXBsZS5saXN0W1tpXV0gPC0gUnVuUENBKHNhbXBsZS5saXN0W1tpXV0sIHZlcmJvc2UgPSBGQUxTRSwgbnBjcyA9IDMwLCBmZWF0dXJlcyA9IHZhcmlhYmxlX2ZlYXR1cmVzKQogIH0KCiAgIyBGaW5kIGludGVncmF0aW9uIGFuY2hvcnMKICBpbnQuYW5jaG9ycyA8LSBGaW5kSW50ZWdyYXRpb25BbmNob3JzKG9iamVjdC5saXN0ID0gc2FtcGxlLmxpc3QsIGRpbXMgPSBkaW1zLCByZWR1Y3Rpb24gPSAicnBjYSIpCgogICMgSW50ZWdyYXRlIGRhdGEKICBpbnRlZ3JhdGVkX3NldXJhdCA8LSBJbnRlZ3JhdGVEYXRhKGFuY2hvcnNldCA9IGludC5hbmNob3JzLCBkaW1zID0gZGltcykKCiAgcmV0dXJuKGludGVncmF0ZWRfc2V1cmF0KQp9CgoKCmBgYAoKVXNlIGZ1bmN0aW9uIHRvIGludGVncmF0ZSB0aGUgSEMKCmBgYHtyfQoKc3VibGlzdCA8LSBTcGxpdE9iamVjdChuZXVyLkhDLCBzcGxpdC5ieSA9ICJMaW5lIikKCmludC5IQyA8LSBpbnRlZ3JhdGVfc2V1cmF0X29iamVjdHMoc3VibGlzdCwgZGltcyA9IDE6MzApCnJtKHN1Ymxpc3QpCnN1Ymxpc3QgPC0gU3BsaXRPYmplY3QobmV1ci5QRCwgc3BsaXQuYnkgPSAiTGluZSIpCgppbnQuUEQgPC0gaW50ZWdyYXRlX3NldXJhdF9vYmplY3RzKHN1Ymxpc3QsIGRpbXMgPSAxOjMwKQpybShzdWJsaXN0KQpzdWJsaXN0IDwtIFNwbGl0T2JqZWN0KG5ldXIuUERpc28sIHNwbGl0LmJ5ID0gIkxpbmUiKQoKaW50LlBEaXNvIDwtIGludGVncmF0ZV9zZXVyYXRfb2JqZWN0cyhzdWJsaXN0LCBkaW1zID0gMTozMCkKCgpgYGAKCgoKYGBge3J9CgojIENyZWF0ZSBhIGxpc3Qgb2YgdGhlIHRocmVlIFNldXJhdCBvYmplY3RzCkRlZmF1bHRBc3NheShpbnQuSEMpIDwtICJSTkEiCkRlZmF1bHRBc3NheShpbnQuUEQpIDwtICJSTkEiCiNEZWZhdWx0QXNzYXkoaW50LlBEaXNvKSA8LSAiUk5BIiAjIGRpZG4ndCBzYXZlCk5ldXJvbl9saXN0IDwtIGxpc3QoIkhDIiA9IGludC5IQywiUEQiID0gaW50LlBEKQoKCiMgSW50ZWdyYXRlIHRoZSBTZXVyYXQgb2JqZWN0cwppbnRlZ3JhdGVkX3NldXJhdCA8LSBpbnRlZ3JhdGVfc2V1cmF0X29iamVjdHMoTmV1cm9uX2xpc3QsIGRpbXMgPSAxOjIwKQoKCgpgYGAKCmBgYHtyfQojIHNhdmUgaW50ZWdyYXRlZCBvYmplY3RzCnNhdmVSRFMoaW50LkhDLCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvUGFyc2VOQ0FERHNhbXBsZXNOZXVyb25zaW50SEMuUkRTIikKc2F2ZVJEUyhpbnQuUEQsICIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9QYXJzZUV4YW1wbGUvRXgyXzQ4d2VsbC9QYXJzZU5DQUREc2FtcGxlc05ldXJvbnNpbnRQRC5SRFMiKQpzYXZlUkRTKGludC5QRGlzbywgIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeDJfNDh3ZWxsL1BhcnNlTkNBRERzYW1wbGVzTmV1cm9uc2ludFBEaXNvLlJEUyIpCgpgYGAKClJlYWQgaW4gdGhlIGludGVncmF0ZWQgb2JqZWN0cyBhbmQgdGhlbiBpbnRlZ3JhdGUgYWxsIDMKCmBgYHtyfQoKaW50LkhDIDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeDJfNDh3ZWxsL1BhcnNlTkNBRERzYW1wbGVzTmV1cm9uc2ludEhDLlJEUyIpCmludC5QRCA8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9QYXJzZUV4YW1wbGUvRXgyXzQ4d2VsbC9QYXJzZU5DQUREc2FtcGxlc05ldXJvbnNpbnRQRC5SRFMiKQppbnQuUERpc28oIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeDJfNDh3ZWxsL1BhcnNlTkNBRERzYW1wbGVzTmV1cm9uc2ludFBELlJEUyIpCgpgYGAKCkludGVncmF0ZWQgb25seSB0aGUgUEQgYW5kIEhDCgoKYGBge3J9CiMgbWFrZSBVTUFQIGZyb20gaW50ZWdyYXRlZApzZXUgPC0gaW50ZWdyYXRlZF9zZXVyYXQKc2V1IDwtIFNjYWxlRGF0YShzZXUpCnNldSA8LSBSdW5QQ0Eoc2V1LCBucGNzID0gMjAsIHZlcmJvc2UgPSBGQUxTRSkKc2V1IDwtIFJ1blVNQVAoc2V1LCByZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MjAsIG4ubmVpZ2hib3JzID0gODEpCnNldSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzZXUpCnNldSA8LSBGaW5kTmVpZ2hib3JzKHNldSwgZGltcyA9IDE6MjAsIGsucGFyYW0gPSA4MSkKc2V1IDwtIEZpbmRDbHVzdGVycyhzZXUsIHJlc29sdXRpb24gPSAwLjMpCkRpbVBsb3Qoc2V1KQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiTGluZSIpCkRpbVBsb3Qoc2V1LCBncm91cC5ieSA9ICJEaXNlYXNlU3RhdHVzIikKCgpgYGAKCgpTYW1wbGVzIGFyZSBub3Qgd2VsbCBpbnRlZ3JhdGVkLiAgSSdsbCB0cnkgdG8gaW50ZWdyYXRlIGJ5IGxpbmVzCgpgYGB7cn0KCiMgc3Vic2V0IGp1c3QgZGlzZWFzZSBhbmQgY29udHJvbApJZGVudHMobmV1cm9ucykgPC0gIkRpc2Vhc2VTdGF0dXMiCk5ldS5IQ1BEIDwtIHN1YnNldChuZXVyb25zLCBpZGVudHMgPSBjKCJIQyIsIlBEIikpCnN1Ymxpc3QgPC0gU3BsaXRPYmplY3QoTmV1LkhDUEQsIHNwbGl0LmJ5ID0gIkxpbmUiKQoKCgojIEludGVncmF0ZSB0aGUgU2V1cmF0IG9iamVjdHMKaW50LlBESEMgPC0gaW50ZWdyYXRlX3NldXJhdF9vYmplY3RzKHN1Ymxpc3QsIGRpbXMgPSAxOjIwKQoKCgpgYGAKCmBgYHtyfQojIG1ha2UgVU1BUCBmcm9tIGludGVncmF0ZWQKc2V1IDwtIGludC5QREhDCnNldSA8LSBTY2FsZURhdGEoc2V1KQpzZXUgPC0gUnVuUENBKHNldSwgbnBjcyA9IDIwLCB2ZXJib3NlID0gRkFMU0UpCnNldSA8LSBSdW5VTUFQKHNldSwgcmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjIwLCBuLm5laWdoYm9ycyA9IDgxKQpzZXUgPC0gRmluZFZhcmlhYmxlRmVhdHVyZXMoc2V1KQpzZXUgPC0gRmluZE5laWdoYm9ycyhzZXUsIGRpbXMgPSAxOjIwLCBrLnBhcmFtID0gODEpCnNldSA8LSBGaW5kQ2x1c3RlcnMoc2V1LCByZXNvbHV0aW9uID0gMC4zKQpEaW1QbG90KHNldSkKRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIkxpbmUiKQpEaW1QbG90KHNldSwgZ3JvdXAuYnkgPSAiRGlzZWFzZVN0YXR1cyIpCgpgYGAKCgpBbm5vdGF0ZQoKZ2VuZSBsaXN0cyAKYGBge3J9CgpkYV9uZXVyb25zIDwtIGMoIlRIIiwiU0xDNkEzIiwiU0xDMThBMiIsIlNPWDYiLCJORE5GIiwiU05DRyIsIkFMREgxQTEiLCJDQUxCMSIsIlRBQ1IyIiwiU0xDMTdBNiIsIlNMQzMyQTEiLCJPVFgyIiwiR1JQIiwiTFBMIiwiQ0NLIiwiVklQIikKTlBDX29yU3RlbUxpa2UgPC0gYygiRENYIiwiTkVVUk9EMSIsIlRCUjEiLCJQQ05BIiwiTUtJNjciLCJTT1gyIiwiTkVTIiwiUEFYNiIpCm1hdHVyZV9uZXVyb25zID0gYygiUkJGT1gzIiwiU1lQIiwiVkFNUDEiLCJWQU1QMiIsIlRVQkIzIiwiU1lUMSIsIkJTTiIsIkhPTUVSMSIsIlNMQzE3QTYiKQpleGNpdGF0b3J5X25ldXJvbnMgPSBjKCJHUklBMiIsIkdSSUExIiwiR1JJQTQiLCJHUklOMSIsIkdSSU4yQiIsIkdSSU4yQSIsIkdSSU4zQSIsIkdSSU4zIiwiR1JJUDEiLCJDQU1LMkEiKQppbmhiaXRvcnlfbmV1cm9ucyA9IGMoIkdBRDEiLCJHQUQyIiwgIkdBVDEiLCJQVkFMQiIsIkdBQlIyIiwiR0FCUjEiLCJHQlJSMSIsIkdBQlJCMiIsIkdBQlJCMSIsIkdBQlJCMyIsIkdBQlJBNiIsIkdBQlJBMSIsIkdBQlJBNCIsIlRSQUsyIikKYXN0cm9jeXRlcyA8LSBjKCJHRkFQIiwiUzEwMEIiLCJBUVA0IiwiQVBPRSIsICJTT1g5IiwiU0xDMUEzIikKb2xpZ29kZW5kcm9jeXRlcyA8LSBjKCJNQlAiLCJNT0ciLCJPTElHMSIsIk9MSUcyIiwiU09YMTAiKQoKcmFkaWFsX2dsaWEgPC0gYygiUFRQUkMiLCJBSUYxIiwiQURHUkUxIiwgIlZJTSIsICJUTkMiLCJQVFBSWjEiLCJGQU0xMDdBIiwiSE9QWCIsIkxJRlIiLAogICAgICAgICAgICAgICJJVEdCNSIsIklMNlNUIiwiU0xDMUEzIikKZXBpdGhlbGlhbCA8LSBjKCJIRVMxIiwiSEVTNSIsIlNPWDIiLCJTT1gxMCIsIk5FUyIsIkNESDEiLCJOT1RDSDEiKQoKbWljcm9nbGlhIDwtIGMoIklCQTEiLCJQMlJZMTIiLCJQMlJZMTMiLCJUUkVNMTE5IiwgIkdQUjM0IiwiU0lHTEVDSCIsIlRSRU0yIiwKICAgICAgICAgICAgICAgIkNYM0NSMSIsIkZDUkxTIiwiT0xGTUwzIiwiSEVYQiIsIlRHRkJSMSIsICJTQUxMMSIsIk1FUlRLIiwKICAgICAgICAgICAgICAgIlBST1MxIikKCmZlYXR1cmVzX2xpc3QgPC0gYygiTUtJNjciLCJTT1gyIiwiUE9VNUYxIiwiRExYMiIsIlBBWDYiLCJTT1g5IiwiSEVTMSIsIk5FUyIsIlJCRk9YMyIsIk1BUDIiLCJOQ0FNMSIsIkNEMjQiLCJHUklBMiIsIkdSSU4yQiIsIkdBQkJSMSIsIkdBRDEiLCJHQUQyIiwiR0FCUkExIiwiR0FCUkIyIiwiVEgiLCJBTERIMUExIiwiTE1YMUIiLCJOUjRBMiIsIkNPUklOIiwiQ0FMQjEiLCJLQ05KNiIsIkNYQ1I0IiwiSVRHQTYiLCJTTEMxQTMiLCJDRDQ0IiwiQVFQNCIsIlMxMDBCIiwgIlBER0ZSQSIsIk9MSUcyIiwiTUJQIiwiQ0xETjExIiwiVklNIiwiVkNBTTEiKQoKc2hvcnRfbGlzdCA8LSBjKCJNS0k2NyIsIlNPWDkiLCJIRVMxIiwiTkVTIiwiRExYMiIsIlJCRk9YMyIsIk1BUDIiLCJUSCIsIkNBTEIxIiwiS0NOSjYiLCJTTEMxQTMiLCJDRDQ0IiwiQVFQNCIsIlMxMDBCIiwiT0xJRzIiLCJNQlAiLCJWSU0iKQoKCmdlbmVfbGlzdHMgPSBsaXN0KCJEQV9uZXVyb25zIiA9IGRhX25ldXJvbnMsICJOUEMiID0gTlBDX29yU3RlbUxpa2UsCiAgICAgICAgICAgICAgICAgICJOZXVyb25zIiA9IG1hdHVyZV9uZXVyb25zLCAKICAgICAgICAgICAgICAgICAgIk9saWdvIiA9IG9saWdvZGVuZHJvY3l0ZXMsICJSYWRpYWxHbGlhIiA9IHJhZGlhbF9nbGlhLAogICAgICAgICAgICAgICAgICAiRXBpdGhlbGlhbCIgPSBlcGl0aGVsaWFsKQpgYGAKCmBgYHtyfQpJZGVudHMoc2V1KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKCmZvciAoaSBpbiBkYV9uZXVyb25zKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KYGBgCgpNYWtlIGEgZG90cGxvdCBvZiBEQSBnZW5lcyB0aGF0IGFyZSBleHByZXNzZWQKCmBgYHtyfQpkYV9uZXVyb25zIDwtIGMoIlRIIiwiU0xDMThBMiIsIlNPWDYiLCJORE5GIiwiQUxESDFBMSIsIlNMQzE3QTYiLCJTTEMzMkExIiwiT1RYMiIsIkxQTCIpCgpEb3RQbG90KHNldSwgZmVhdHVyZXMgPSBkYV9uZXVyb25zKSArIFJvdGF0ZWRBeGlzKCkKCgpgYGAKCmBgYHtyfQpEZWZhdWx0QXNzYXkoc2V1KSA8LSAiUk5BIgpzZXUgPC0gU2NhbGVEYXRhKHNldSkKSWRlbnRzKHNldSkgPC0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiCgpmb3IgKGkgaW4gTlBDX29yU3RlbUxpa2UpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQpgYGAKYGBge3J9CklkZW50cyhzZXUpIDwtICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIgoKZm9yIChpIGluIG1hdHVyZV9uZXVyb25zKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCgpgYGAKCmBgYHtyfQpJZGVudHMoc2V1KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKCmZvciAoaSBpbiBleGNpdGF0b3J5X25ldXJvbnMpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQoKCmBgYAoKYGBge3J9CgpJZGVudHMoc2V1KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKaW5oYml0b3J5X25ldXJvbnMgPSBjKCJHQUQxIiwiR0FEMiIsIlBWQUxCIiwiR0FCUkIyIiwiR0FCUkIxIiwiR0FCUkIzIiwiR0FCUkE2IiwiR0FCUkExIiwiR0FCUkE0IiwiVFJBSzIiKQoKZm9yIChpIGluIGluaGJpdG9yeV9uZXVyb25zKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCmBgYAoKYGBge3J9CklkZW50cyhzZXUpIDwtICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIgoKZm9yIChpIGluIGVwaXRoZWxpYWwpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQoKYGBgCmBgYHtyfQpJZGVudHMoc2V1KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKbWljcm9nbGlhIDwtIGMoIlAyUlkxMiIsIlAyUlkxMyIsICJHUFIzNCIsIlRSRU0yIiwKICAgICAgICAgICAgICAgIkNYM0NSMSIsIk9MRk1MMyIsIkhFWEIiLCJUR0ZCUjEiLCAiU0FMTDEiLCJNRVJUSyIsCiAgICAgICAgICAgICAgICJQUk9TMSIpCiMgbm8gSUJBMSwgVFJFTTExOSJTSUdMRUNIIiwiRkNSTFMiLApmb3IgKGkgaW4gbWljcm9nbGlhKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCmBgYApgYGB7cn0KZm9yIChpIGluIGFzdHJvY3l0ZXMpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQpgYGAKCmBgYHtyfQpmb3IgKGkgaW4gb2xpZ29kZW5kcm9jeXRlcykgewogIHByaW50KEZlYXR1cmVQbG90KHNldSwgZmVhdHVyZXMgPSBpLCBtaW4uY3V0b2ZmID0gJ3ExJywgbWF4LmN1dG9mZiA9ICdxOTcnLCBsYWJlbCA9IFRSVUUpKQp9CmBgYApgYGB7cn0KZm9yIChpIGluIHJhZGlhbF9nbGlhKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3Qoc2V1LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KYGBgCgpHZXQgbWFya2VycyBhbmQgY2hlY2sgRW5yaWNoUgoKYGBge3J9CgpDbHVzdGVyTWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhzZXUsIG9ubHkucG9zID0gVFJVRSkKCmBgYAoKYGBge3J9CmxpYnJhcnkoZW5yaWNoUikKc2V0RW5yaWNoclNpdGUoIkVucmljaHIiKSAjIEh1bWFuIGdlbmVzCiMgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcwojIGdldCB0aGUgcG9zc2libGUgbGlicmFyaWVzCmRicyA8LSBsaXN0RW5yaWNockRicygpCgojIHRoaXMgd2lsbCBsaXN0IHRoZSBwb3NzaWJsZSBsaWJyYXJpZXMKZGJzCgojIHNlbGVjdCBsaWJyYXJpZXMgd2l0aCBjZWxsIHR5cGVzCmRiIDwtIGMoJ0NlbGxNYXJrZXJfQXVnbWVudGVkXzIwMjEnLCdBemltdXRoX0NlbGxfVHlwZXNfMjAyMScpCgojIGZ1bmN0aW9uIGZvciBhIHF1aWNrIGxvb2sKY2hlY2tDZWxsdHlwZXMgPC0gZnVuY3Rpb24oY2x1c3Rlcl9udW0gPSAwKXsKICBjbHVzdGVyWCA8LSBDbHVzdGVyTWFya2VycyAlPiUgZmlsdGVyKGNsdXN0ZXIgPT0gY2x1c3Rlcl9udW0gJiBhdmdfbG9nMkZDID4gMC4yNSkKICBnZW5lcyA8LSBjbHVzdGVyWCRnZW5lCiAgIyB0aGUgY2VsbCB0eXBlIGxpYnJhcmllcwogICMgZ2V0IHRoZSByZXN1bHRzIGZvciBlYWNoIGxpYnJhcnkKICBjbHVzdGVyWC5jZWxsIDwtIGVucmljaHIoZ2VuZXMsIGRhdGFiYXNlcyA9IGRiKQogICMgdmlzdWFsaXplIHRoZSByZXN1bHRzCnByaW50KHBsb3RFbnJpY2goY2x1c3RlclguY2VsbFtbMV1dLCBzaG93VGVybXMgPSAyMCwgbnVtQ2hhciA9IDQwLCB5ID0gIkNvdW50Iiwgb3JkZXJCeSA9ICJQLnZhbHVlIiwgdGl0bGUgPSAnQ2VsbE1hcmtlcl9BdWdtZW50ZWRfMjAyMScpKQpwcmludChwbG90RW5yaWNoKGNsdXN0ZXJYLmNlbGxbWzJdXSwgc2hvd1Rlcm1zID0gMjAsIG51bUNoYXIgPSA0MCwgeSA9ICJDb3VudCIsIG9yZGVyQnkgPSAiUC52YWx1ZSIsIHRpdGxlID0gJ0F6aW11dGhfQ2VsbF9UeXBlc18yMDIxJykpCgp9CgpgYGAKVG9wIG1hcmtlcnMKCmBgYHtyfQpoZWFkKENsdXN0ZXJNYXJrZXJzKQp0b3A1IDwtIENsdXN0ZXJNYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24obj01LCB3dCA9YXZnX2xvZzJGQykKCkRlZmF1bHRBc3NheShzZXUpIDwtICJSTkEiCnNldSA8LSBOb3JtYWxpemVEYXRhKHNldSkKCgp0b3A1Cgp0b3AyIDwtIENsdXN0ZXJNYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24obj0yLCB3dCA9YXZnX2xvZzJGQykKRG9IZWF0bWFwKHNldSwgZmVhdHVyZXMgPSB0b3A1JGdlbmUsIHNpemUgPSAzLCBhbmdsZSA9IDkwLCBncm91cC5ieSA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIikKCkRvSGVhdG1hcChzZXUsIGZlYXR1cmVzID0gdG9wMiRnZW5lLCBzaXplID0gMywgYW5nbGUgPSA5MCwgZ3JvdXAuYnkgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIpCmBgYAoKcXVpY2sgY2hlY2sgRW5yaWNoUgoKYGBge3J9CgpjaGVja0NlbGx0eXBlcyhjbHVzdGVyX251bSA9IDExKQoKYGBgCkFkZCBhbm5vdGF0aW9ucwoKYGBge3J9CgpsaWJyYXJ5KENlbGx0eXBlUikKY2VsbHR5cGVzMSA8LSBjKCJOZXVyb24xIiwiTmV1cm9uMiIsIkVwaXRoZWxpYWwiLCJOZXVyb24zIiwgIkFzdHJvIiwiTmV1cm9uNC1USCIsIk5ldXJvbjUiLAogICAgICAgICAgICAgICAgIlN0ZW0iLCJOZXVyb242IiwiTmV1cm9uNyIsICJQZXJpY3l0ZSIsICJOZXVyb244IikKCnNldSA8LSBhbm5vdGF0ZShzZXUsIGFubm90YXRpb25zID0gY2VsbHR5cGVzMSwgdG9fbGFiZWwgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIsYW5ub3RhdGlvbl9uYW1lID0gIkNlbGx0eXBlczEiKQpEaW1QbG90KHNldSwgbGFiZWwgPSBUUlVFLCBncm91cC5ieSA9ICJDZWxsdHlwZXMxIikKCmNlbGx0eXBlczIgPC0gYygiaW1OZXVyb24tREEiLCJpbU5ldXJvbi1HQUJBLURBIiwiRXBpdGhlbGlhbCIsImltTmV1cm9uLURBIiwKICAgICAgICAgICAgICAgICJBc3RybyIsImltTmV1cm9uLUdsdXQtREEiLCJpbU5ldXJvbi1EQSIsCiAgICAgICAgICAgICAgICAiU3RlbSIsImltTmV1cm9uLUdsdXQiLCJpbU5ldXJvbi1EQSIsICJQZXJpY3l0ZSIsICJOUEMiKQoKc2V1IDwtIGFubm90YXRlKHNldSwgYW5ub3RhdGlvbnMgPSBjZWxsdHlwZXMyLCB0b19sYWJlbCA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIixhbm5vdGF0aW9uX25hbWUgPSAiQ2VsbHR5cGVzMiIpCklkZW50cyhzZXUpIDwtICJDZWxsdHlwZXMyIgpEaW1QbG90KHNldSwgbGFiZWwgPSBUUlVFKQoKY2VsbHR5cGVzMyA8LSBjKCJpbU5ldXJvbi1EQSIsImltTmV1cm9uLURBIiwiRXBpdGhlbGlhbCIsImltTmV1cm9uLURBIiwKICAgICAgICAgICAgICAgICJBc3RybyIsImltTmV1cm9uLURBIiwiaW1OZXVyb24tREEiLAogICAgICAgICAgICAgICAgIlN0ZW0iLCJpbU5ldXJvbiIsImltTmV1cm9uLURBIiwgIlBlcmljeXRlIiwgIk5QQyIpCgpzZXUgPC0gYW5ub3RhdGUoc2V1LCBhbm5vdGF0aW9ucyA9IGNlbGx0eXBlczMsIHRvX2xhYmVsID0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiLGFubm90YXRpb25fbmFtZSA9ICJDZWxsdHlwZXMzIikKRGltUGxvdChzZXUsIGxhYmVsID0gVFJVRSkKCmBgYAoKYGBge3J9CkRpbVBsb3Qoc2V1LCBsYWJlbCA9IEZBTFNFLCBncm91cC5ieSA9ICJEaXNlYXNlU3RhdHVzIikKYGBgCgoKClNhdmUgdGhlIGFubm90YXRlZCBuZXVyb25zCgpgYGB7cn0KCnNhdmVSRFMoc2V1LCAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4Ml80OHdlbGwvRXgyTmV1cm9uc0ludFBEYW5kSEMuUkRTIikKCmBgYAoKCg==